ExcelのCellsオブジェクトについて教えてください
下記のように値をセルに代入しています。このように記述した時に、
xlSheet.Cells(mActiveRow, mActiveCol)の後にValueがインテリセンスで
候補として出てきませんがExcelへの代入はされます。
この記述方法は正しいのでしょうか?
MSDNも見てみましたがCellsオブジェクトのValueは
メンバーに見つけられませんでした。
開発環境:XP VB2005 Office2003
Imports Microsoft.Office.Interop
Public Class MsExcel
xlApp = New Excel.Application
xlBook = xlApp.Workbooks.Add
xlSheet = xlBook.Worksheets("sheet1")
xlApp.Visible = True
xlSheet.Cells(mActiveRow, mActiveCol).Value = val
よろしくお願いします。
> この記述方法は正しいのでしょうか?
間違ってはいませんが、正しくもありません。
修正しておいた方が良いでしょうね。
> xlBook = xlApp.Workbooks.Add
> xlSheet = xlBook.Worksheets("sheet1")
これらの記述を行うと、Excel オブジェクトが正しく終了せずに
非表示のまま残ってしまう原因となってしまいます。
正しく処理するため、「Marshal.ReleaseComObject」というキーワードで
過去ログ等を検索してみてください。
> Valueがインテリセンスで候補として出てきませんが
Cells プロパティの戻り値が Object 型だからです。
> この記述方法は正しいのでしょうか?
実際には、Excel.Range 型のオブジェクトが返されていますので、
その Value プロパティが、「レイトバインド」で呼び出されるため、
動作する事になります。
なお、この Range オブジェクトの Value プロパティは、
Excel 2000 以下では引数の無いプロパティでしたが、
Excel 2002 以上では、省略可能な引数として
XlRangeValueDataType を受け取るようになっています。
> MSDNも見てみましたがCellsオブジェクトのValueは
> メンバーに見つけられませんでした。
Excel のメンバについては、MSDN ではなく、
Excel VBA のヘルプファイルを参照してください。
なお、Excel を標準インストールした場合、Excel 本体のヘルプファイルは
インストールされていても、Excel VBA のヘルプファイルは
インストールされていないことがあります。もしも VBA のヘルプが
入っていないようであれば、フルインストールまたはカスタムインストールで
VBA のヘルプもインストールしておかれる事をお奨めします。
>これらの記述を行うと、Excel オブジェクトが正しく終了せずに
>非表示のまま残ってしまう原因となってしまいます。
タスクマネージャで確認して問題なかったので、上記のように宣言して
使っていました。過去ログを参考に修正しました。
>実際には、Excel.Range 型のオブジェクトが返されていますので・・・
これがレイトバインド(遅延バインド)なんですね。
勉強になりました。
これで気になっていた事がすっきりしました。
ありがとうございました。
ツイート | ![]() |