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

解決


ぽち  2009-08-24 00: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-24 01: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-25 05:10:40  No: 142443

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

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

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

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


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

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






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