QA@IT

Cellの値が読み込めない

6592 PV

@ITの記事「Excelファイルにアクセスするには?[C#、VB] - @IT」についての質問です。
ExcelのSheet設定までできるようになりました。有り難うございました。
Cellの値を下記にて読み込もうとしましたが、
Dim oSheet As Excel.Worksheet ' Worksheet オブジェクト
Dim rng As Excel.Range ' Range オブジェクト
rng = DirectCast(oSheet.Cells(1, 4), Excel.Range)
strCelCar = rng.Text.ToString() ' A1セルの内容
「警告 3 変数 'oSheet' は、値が割り当てられる前に使用されています。Null 参照の例外が実行時に発生する可能性があります。」とエラーメッセジがでます。この状態でデバッグを行うとrng = DirectCast(oSheet.Cells(1, 4), Excel.Range)の所で下記エラーメッセージが出てデバッグが停止します。
「NullReferenceExpectionはハンドルされませんでした。
オブジェクト参照がオブジェクトインスタンスにせっていされていません」

回答

別のご質問で、

oSheet = DirectCast(oWBook.Sheets(getSheetIndex(sheetName, oWBook.Sheets)), Excel.Worksheet)

というコードがあったかと思います。
今回のコードは、その続きで書かないとダメです。

具体的には、oWBook.Sheets(...)でオブジェクトの参照を取得していますので、この処理がなければoSheetが初期状態であるNothingの状態になってしまい、NullReferenceExpection(いわゆる「ぬるぽ」ですね)が発生してしまいます。

.

※以下、ちょっと蛇足になるのでお読みにならなくても構いません。

NullとかNothingとか出てきてややこしいですが、どちらも「参照に何も設定されていない状態」のことです。VBではNothingを使うのですが、.Net的にはNullなのでこうなってしまっています。「ぬるぽ」はJavaの用語で、NullPointerExceptionのことです。
いずれも、「Null参照」のことを言っています。

編集 履歴 (0)
  • 下記のようにCellを取り出すプロシージャを下記の位置に移しました。(A4)のセル読み込む内容。A4には文字が入力されているのですが、ブランクが帰ってきます。
    oSheet.Select()
    rng = DirectCast
    sCellVal = rng.Text.ToString() ' A4セルの内容
    -
  • A4セルの値を参照するには、Cells(4, 1)とします。"A4"と逆なので間違えやすいところですね。 -
  • シートを設定する制御の後に追加したらうまくいきました。
    有り難うございました。
    -

ちょっと別の観点からということで、二重の回答になってしまい失礼します。

どうしてもVisual StudioのVBで開発しなければならないのでしょうか。
Excelの処理を自動化するだけであれば、VBAを使った方が多少簡単ではないかと思います。
例えば、下記のようなサイトは山のようにあります。
Excel VBA 入門講座

ファイルを開いた時にVBAの処理を実行する、といったこともできます。


(追記)
やはり記事がちょっと古いんじゃないかと思います。
VB2008のVBにあったサイトを参考にされたほうが良いかと。
ざっと見た感じでは、このあたり。
Excelブックを読み書きする.NET アプリケーションを作る (1/3):CodeZine
えいくんちひとりごと vb.netからEXCELを操作する

.
これで足りないようでしたら、Googleで探してみましょう。下記リンクで検索できます。
vs2008 vb excel 操作 - Google 検索

編集 履歴 (1)
  • これが終わったらVBで作成予定のプログラムがあります。
    そこでExcelを読み込む操作が必要になるので、その準備も兼ねてVBで作成しています。
    -
  • そうでしたか。それならなおのこと、参考にされているページを変えた方が良いと思いますよ。リンクをいくつかピックアップしてみましたので、ご参考にしていただければ。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。