タイトル | : Excel2000が利用できない |
記事No | : 510 |
投稿日 | : 2003/10/29(Wed) 11:13 |
投稿者 | : 川村 |
[OSのVer]:Windows 2000 Server [VBのVer]:VB.NET
概要 Windows2000 Server,Office XPの開発環境で、 Excelにデータを転送する処理を行っています。 「Excelブックの新規追加」及び 「既存のExcelブックの利用」の 処理を行っております。 (参考コードは文末)
アドバイスをお願いしたい問題点 Excel2000のパソコンにプログラムを配布し動作させると、 「Excelブックの新規追加」では、問題なく処理されますが、 「既存のExcelブックの利用」の場合、 xlFormBook = CType(xlApp.Workbooks.Open(wkPathFile), Excel.Workbook) で 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 のエラーウィンドウが表示し、Excelへデータは転送されません。 なお、プログラムの配布は、開発環境パソコンの 該当「bin」フォルダ直下の全ファイルをコピーして行っています。
Excel2000パソコンが問題でないかと判断した理由 以下の動作結果による Windows XP Pro + Office XP -> OK Windows 2000 Server + Office XP -> OK Windows 2000 + Office 2000 -> NG Windows 98 SE + Office 2000 -> NG
Microsoft Excel Object Libraryのバージョン違い(関係ないか?) Microsoft AccessのモジュールでのExcel関連の 参照設定のリストにおいて Access2002(Office XP)は Microsoft Excel 10.0 Object Library で今回VB.NETでの「参照の追加」と同じ Access2000(Office 2000)は Microsoft Excel 9.0 Object Library
過去のログで、 「参照の追加」をせず「遅延バインディング」での利用 があり、トライをしてみました。 しかし、Excelの参照設定を削除すると、Excel.Workbook のコードでエラーが発生した事、またこの方法が不具合の 解決につながるのかわからなかったこともあり、 これ以上のテストなどは行っていません。
問合せのできる相手が1人もいないため、 見当はずれの基本的なところで間違っているかもしれません。
Excelブックの新規追加----------------------------- Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet ExcelApp起動() xlBook = CType(xlApp.Workbooks.Add, Excel.Workbook) xlSheet = CType(xlBook.Worksheets(1), Excel.Worksheet)
既存のExcelブックの利用------------------------- Dim xlBook As Excel.Workbook Dim xlFormBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim wkPathFile As String wkPathFile = CurDir() & "\AAA\BBB\KKKKK.xls" ExcelApp起動() xlBook = CType(xlApp.Workbooks.Add, Excel.Workbook) MessageBox.Show("パスファイル" & wkPathFile) xlFormBook = CType(xlApp.Workbooks.Open(wkPathFile), Excel.Workbook) MessageBox.Show("パスファイルコピー前" & wkPathFile) xlFormBook.Sheets("ZZZ").Copy(Before:=xlBook.Sheets(1)) MessageBox.Show("パスファイルコピー後" & wkPathFile) xlApp.DisplayAlerts = False xlFormBook.Close() xlApp.DisplayAlerts = True xlSheet = CType(xlBook.Worksheets("ZZZ"), Excel.Worksheet)
(MessageBoxは、エラー発生箇所を特定するため一時的なもの。)
------------------------------------------------ Public pubExcelOn As Boolean Public xlApp As Excel.Application
Public Sub ExcelApp起動() If pubExcelOn = False Then xlApp = CType(CreateObject("Excel.Application"),Excel.Application) pubExcelOn = True End If xlApp.DisplayFullScreen = True xlApp.DisplayFullScreen = False End Sub
|