@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Null参照の例外

1
投稿者投稿内容
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2008-10-21 11:28
 こんにちは。

VB2005でExcelの操作でNull参照の例外が表示されます。
みなさんならどのようにされますか
教えて下さい。

コードは
Dim oXls As Excel.Application
Dim oWBook As Excel.Workbook
Dim oSheet As Excel.Worksheet

oXls = New Excel.Application()

Try
oWBook = oXls.Workbooks.Open(エクセル名)
oSheet = DirectCast(oWBook.Sheets(1), Excel.Worksheet)
oWBook.Close(SaveChanges:=True)
oXls.Quit()
Catch ex As Exception

Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oWBook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oXls)
End Try

です。

このSystem.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
とSystem.Runtime.InteropServices.Marshal.ReleaseComObject(oWBook)
の部分でNull参照の例外が実行時に発生する可能性があります。

と表示されます。

正しく解放されるように Finallyに
ReleaseComObjectをコーディングしましたが・・・

ご教授よろしくお願いします。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-10-21 12:06
引用:

なびさんの書き込み (2008-10-21 11:28) より:
 こんにちは。

VB2005でExcelの操作でNull参照の例外が表示されます。
みなさんならどのようにされますか
教えて下さい。

コードは
コード:

Dim oXls As Excel.Application = Nothing
Dim oWBook As Excel.Workbook = Nothing
Dim oSheet As Excel.Worksheet = Nothing

oXls = New Excel.Application()

Try
oWBook = oXls.Workbooks.Open(エクセル名)
oSheet = DirectCast(oWBook.Sheets(1), Excel.Worksheet)
oWBook.Close(SaveChanges:=True)
oXls.Quit()
Catch ex As Exception

Finally
If oSheet Is Not Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
End If
If oWBook Is Not Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(oWBook)
End If
If oXls Is Not Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(oXls)
End If
End Try


です。

このSystem.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
とSystem.Runtime.InteropServices.Marshal.ReleaseComObject(oWBook)
の部分でNull参照の例外が実行時に発生する可能性があります。

と表示されます。

正しく解放されるように Finallyに
ReleaseComObjectをコーディングしましたが・・・

ご教授よろしくお願いします。





[ メッセージ編集済み 編集者: Jitta 編集日時 2008-10-21 12:07 ]
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2008-10-21 14:10
Jittaさん、ありがとうございます。

If oSheet Is Not Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
End If
としましたが

Isには参照型を持つオペランドが必要ですが
このオペランドの値型はIntegerです

のエラーになってしまいます。

もう少しご教授頂けないでしょうか?

よろしくお願いします。
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2008-10-21 14:32
すいません

If oSheet IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
End If
でOKでした。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-10-21 17:37
引用:

なびさんの書き込み (2008-10-21 11:28) より:

oWBook = oXls.Workbooks.Open(エクセル名)


これと、

引用:

oSheet = DirectCast(oWBook.Sheets(1), Excel.Worksheet)


これが別の理由でダメですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)