vb2010から既存のExcelをオープンするプログラムを、色々なサイトのサンプルを参考にして作りました。開発環境(VisualStudio)および開発用マシンに実行モジュールをインストールして動かすと、問題なく動作します。しかし、別のマシン(WinXP,Win7:両方テスト)にインストールすると「オブジェクト参照がオブジェクトインスタンスに設定されていません」というエラーが発生します。エラー箇所は、下記のコーディングのファイルオープンのステートメントです。
別マシンでは、フォーム系の別プログラムは正常に動作しています。Windows Updateで、最新の.NetFrameworkはインストールしているつもりです。Excelを制御する何かのコンポーネントのようなものが足りないのか?などと、中途半端な知識しかなく、問題を解決できません。
有識者の方のサポートを是非お願いします。
Excelのバージョンが違うのが原因だと思います。
開発環境と実行環境のExcelのバージョンを合わせるか、ExcelObjectLibralyのバージョンを実行環境のExcelのバージョンに合わせれば直るのではないでしょうか。
以下が実際のコーディング内容です。
Imports Excel = Microsoft.Office.Interop.Excel
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Core
Imports System.Runtime.InteropServices
Public Class ExcelCtl
Public xlApp As New Excel.Application
Public xlBooks As Excel.Workbooks
Public xlBook As Excel.Workbook
Public xlSheets As Excel.Sheets
Public xlSheet As Excel.Worksheet
Public xlClose As Boolean
Public Function ExcelOpen(ByVal FilePath As String, ByVal SheetName As String)
''Excel のオープン処理用プロシージャ
On Error GoTo ErrHandler
Dim xlsstat(6) As Object
xlClose = False '起動中は、ユーザが Excel を閉じれないように
xlApp = New Excel.Application
'Excel の WorkbookBeforeClose イベントを取得
AddHandler xlApp.WorkbookBeforeClose, AddressOf xlApp_WorkbookBeforeClose
xlBooks = xlApp.Workbooks
'既存のファイルを開く場合
xlBook = xlBooks.Open(FilePath) <=== ●●● このステートメントでエラー発生 ●●●
xlSheets = xlBook.Worksheets
xlSheet = DirectCast(xlSheets(SheetName), Excel.Worksheet)
xlApp.Visible = False
xlsstat(1) = xlApp
xlsstat(2) = xlBooks
xlsstat(3) = xlBook
xlsstat(4) = xlSheets
xlsstat(5) = xlSheet
xlsstat(6) = xlClose
Return xlsstat
Exit Function
ErrHandler:
MsgBox(FilePath & ":" & SheetName)
End Function
End Class
>開発用マシンに実行モジュールをインストールして動かすと、問題なく動作します。
間違えました。すみません。