投稿者 るしぇ  (社会人) 投稿日時 2009/7/29 03:25:57
>HNってなんですか?
Handle Nameです。
http://www.cam.hi-ho.ne.jp/mendoxi/bug/handle-name.html

同じ目的と思われる質問が複数のハンドル名であがる。
過去に質問者として現れたハンドルの人が回答がついてても無反応なのに
上記スレッドには合いの手を入れる。
…その際、高校生が小学生に変わってる。
こちらから見てると実に気持ち悪くて、関わりたく無いと思っています。
で、ボクの場合、基本的には放置にします。

>多分この書き方ではインスタンスが正常に破棄されない。
補足です。
VB.NET で Excelのプロセスが正常に終了しないという問題はかなり有名です。
http://hanatyan.sakura.ne.jp/dotnet/Excel08.htm
これは、プログラム終了後に自作のプログラムと関係の無い Excel ファイルを
開いた場合、正常に表示されないといった実害があります。

これを解決するために、VB.NET から Excel を操作する場合、まずは使用した
オブジェクト毎にCOM解放処理を入れます。この際、
> exBook = exApp.Workbooks.Open("C:\test.xls")
右辺のピリオドが2回出てくるような書き方はすべてNGとなります。
質問者があげたサンプルコードは、この解放処理が丸々抜けています。
VB6 時代のコードなら、終了処理の部分が意味がありましたが、VB.NET では、
有効な終了処理では無くなりました。
VB.NET のサンプルコードを探して、全て書き直してください。


>警告”変数は、値が割り当てられる前に使用されています。Null 参照の例外が実行時に発生する可能性があります。”
オブジェクトを参照する変数は、メモリ上のオブジェクトの先頭アドレスを
格納します。オブジェクトは一般的にサイズが大きいので、丸々メモリ上を
移動させるより先頭アドレスのみやり取りするほうが便利だからです。
(これに対し値型の変数(数値型など)は宣言した時点で実体となり、初期化されます。)

このため、参照変数は宣言しただけでは中身が空っぽです。
メモリ上に用意された実体(インスタンス)の先頭アドレスを格納する作業が必要です。

アドレスを格納する前に参照した場合、空っぽを参照しますので、これが
neptune さんご説明の通り「Null 参照」となります。
変数の中身をデバッグ中に確認すると Nothing となります。
Null 参照した時に表示されるエラーは
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
です。
使用する前に実体を与えればよいというのが、全くもってその通りですが、
無駄な実体を作るのは無意味ですので、やはりこれもサンプル探しから
はじめた方が良いでしょう。