ExcelのCellsオブジェクトを使って代入するには

解決


ぽち  2009-08-23 15:37:49  No: 142441

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

よろしくお願いします。


魔界の仮面弁士  2009-08-23 16:31:53  No: 142442

> この記述方法は正しいのでしょうか?
間違ってはいませんが、正しくもありません。
修正しておいた方が良いでしょうね。


> 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 のヘルプもインストールしておかれる事をお奨めします。


ぽち  2009-08-24 20:10:40  No: 142443

>これらの記述を行うと、Excel オブジェクトが正しく終了せずに
>非表示のまま残ってしまう原因となってしまいます。
タスクマネージャで確認して問題なかったので、上記のように宣言して
使っていました。過去ログを参考に修正しました。


>実際には、Excel.Range 型のオブジェクトが返されていますので・・・
これがレイトバインド(遅延バインド)なんですね。
勉強になりました。

これで気になっていた事がすっきりしました。

ありがとうございました。


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加