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

VB.NETでExcelファイルをオープンさせようとするとオブジェクト参照がオブジェクトインスタンスに設定され

1
投稿者投稿内容
sf5
会議室デビュー日: 2004/04/11
投稿数: 12
投稿日時: 2005-06-20 22:54
お世話になっています。
VB.NETにてcsvファイルをExcelで読み込み保存するプログラムを作成しています。
自分の開発環境では正常に動作したのですが、いざ開発環境が入っていないマシンで
そのexeを実行したところ「91:オブジェクト参照がオブジェクトインスタンスに設定されていませんと出ました。
開発環境では発生しなかったのですが・・・
ご教授お願いいたします。

開発環境はVS2002、VS2003両方とも試しました。
開発環境が入っていないPCには.NETのインストーラーを使用してインストールしました。

ソースを添付します。
xlBook = xlBooks.Open(strCsvFile)で落ちていました。

−−−−−−−−−−以下 ソース−−−−−−−−−−−−−−−−−−−
Dim xlApp As Excel.Application
Dim xlBooks As Excel.Workbooks
Dim xlBook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
Dim xlsheets As Excel.Sheets

Try
xlApp = New Excel.Application()
xlApp.DisplayAlerts = False '確認ダイアログを表示させない
xlApp.Visible = False

xlBooks = xlApp.Workbooks
xlBook = xlBooks.Open(strCsvFile)
xlsheets = xlBook.Sheets
xlsheet = xlsheets(1)
xlsheet.Name = "Sheet1"
xlBook.SaveAs(Me.imeOutputPath.Text, fileformat:=43, CreateBackup:=False)

xlApp.DisplayAlerts = True

mfunExcelOutPut = True
Catch ex As Exception
MessageBox.Show(Err.Number & " : " & Err.Description)
Exit Function
Finally

If xlsheet Is Nothing = False Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsheet)
End If

If xlsheets Is Nothing = False Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsheets)
End If

If xlBook Is Nothing = False Then
xlBook.Close(False)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
End If

If xlBooks Is Nothing = False Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks)
End If

If xlApp Is Nothing = False Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
End If
xlBook = Nothing
xlBooks = Nothing
xlApp = Nothing
End Try
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-06-20 22:56
ソースを転記するのではなく、ヌルポの場合は、どの参照がヌルなのか、はっきりさせてください。

ソースを見ても解りません。

どこの、何が、設定されていないのか、きちんと原因をつかんでください。
_________________
sf5
会議室デビュー日: 2004/04/11
投稿数: 12
投稿日時: 2005-06-21 09:08
返答ありがとうございます。

xlBook = xlBooks.Open(strCsvFile)で落ちていました。
と書きましたので
どの参照がなのかは分かると思いました。
xlBooksがヌルなんでしょうか?

宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-06-21 09:23
こんにちは、じゃんぬ です。

引用:

xlBooksがヌルなんでしょうか?


なんでしょうか? ではなく、ご自分で確かめましょう。
非開発環境でも確認する術はありますよね?
MessageBox で出力するなどして。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-06-21 11:03
引用:

sf5さんの書き込み (2005-06-21 09:08) より:
xlBook = xlBooks.Open(strCsvFile)で落ちていました。
と書きましたので
どの参照がなのかは分かると思いました。
xlBooksがヌルなんでしょうか?



その行だけを見て、そう判断するのは危険。
可能性は全て捨てないでxlBookかxlBooksかstrCsvFileのどれかがNullであると考えて、すべて確認しましょう。

あと、本題とは関係ありませんが、せっかく例外をキャッチしてるんだから、Errオブジェクトで見るよりも例外の情報を参照した方が良いと思いますよ。
_________________
「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-06-21 21:05
> xlBook = xlBooks.Open(strCsvFile)で落ちていました。
書いてあった。。。ごめんなさい。


> 開発環境はVS2002、VS2003両方とも試しました。
 それは問題ではないでしょう。EXCELのバージョンの方が気になります。
 また、Excelを起動しようとしているユーザーで、Excelが一度以上実行され、必要な設定が行われているでしょうか。
# Excelがインストールされていないというオチはないですよね?

_________________
sf5
会議室デビュー日: 2004/04/11
投稿数: 12
投稿日時: 2005-06-21 21:36
引用:

 それは問題ではないでしょう。EXCELのバージョンの方が気になります。
 また、Excelを起動しようとしているユーザーで、Excelが一度以上実行され、必要な設定が行われているでしょうか。
# Excelがインストールされていないというオチはないですよね?



Excelのバージョンを開発環境と実行環境で違っていたため
(開発環境が2002で実行環境が2000だった)
ExcelObjectLibralyのバージョンを10.0→9.0に置き換えて
exeを再作成して動かしてみると動きました。

ありがとうございます。助かりました。
xlApp.visibleをTrueにして動かすとExcel.exeはちゃんと起動してから
エラーMSGが出てたんでバージョンが違うことに気づくのが遅れました。
1

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