VB.NETで作ったアプリケーションをOS98のパソコンにインストールして動作させたのですがエクセルの1つのセルに文字を入れるところでエラーが出てしまします。
「System.Runtime.InteropServices.COMEException(0x80020008)変数の種類が不良です。」と出てしまいます。開発環境では何の問題もなく動きます。
FrameWork1.1もいれてありますし、データベース操作をしているのでMSデータアクセスコンポーネントも入れてあります。
プログラムです。参考にしてください。
☆印まではちゃんと動作するみたいです。
Private Sub BtnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnEnd.Click
'エクセル起動
Dim oExcel As Object
Dim oBook As Object
Try
oExcel = CreateObject("Excel.Application")
oExcel.Visible = True
oExcel.workbooks.Open(Application.StartupPath & "\ガスメータチェック一覧.xls") 'アプリケーションの現在地の絶対パス
oExcel.UserControl = True 'これを設定しておけば勝手に終了しない。
oExcel.worksheets("Sheet1").Range("B5:G100").Select()
☆oExcel.Selection.ClearContents()
'データグリッド表示()
Call DbgDisp()
Dbg_Master.Visible = False
Dim i, cnt As Long
'該当レコード数探索のクラス
'cnt = oDB.RecCount
cnt = Dbg_Master.VisibleRowCount
Dim j As Long
'データグリッドのデータをエクセルに書き込む
For i = 0 To cnt - 2
j = i + 5
oExcel.Cells(j, 2).Value = i + 1
oExcel.Cells(j, 3).Value = Dbg_Master.Item(i, 5)
oExcel.Cells(j, 4).Value = Dbg_Master.Item(i, 1)
oExcel.Cells(j, 5).Value = Dbg_Master.Item(i, 2)
oExcel.Cells(j, 6).Value = Dbg_Master.Item(i, 3)
oExcel.Cells(j, 7).Value = Dbg_Master.Item(i, 4)
Next i
oExcel.Cells(5, 2).Activate()
Catch oExcept As Exception
'例外が発生した時の処理
MsgBox(oExcept.ToString, MsgBoxStyle.OKOnly)
Finally
oExcel = Nothing
oBook = Nothing
End Try
End Sub
>oExcel.Cells(j, 2).Value = i + 1
ではなく、
oExcel.Worksheets("Sheet1").Cells(j, 2).Value = i + 1
ではないでしょうか。
selectを使用せず、Worksheetのオブジェクトを使用してみてはいかがでしょうか?
編集 削除> Dim j As Long
一般的には、Short か Integer などを使うのでは。
配列のインデックスに、Longの範囲が必要になるとも思えませんし。
> ☆oExcel.Selection.ClearContents()
Select系/Activate系のプロパティやメソッドの使用は、極力避けましょう。
どのオブジェクトが選択されているかによって、動作が異なってしまうため、
処理が曖昧になってしまいます。
> oExcel = Nothing
> oBook = Nothing
階層の下側から順に解放した方が良いでしょう。(Worksheet→Workbook→Application)
それと、ReleaseComObjectの呼出が行われていないのも問題になるかと。
http://blogs.users.gr.jp/hidori/archive/2004/01/26/916.aspx
http://support.microsoft.com/default.aspx?scid=kb;ja;317109
有難うございました。上記のことをいろいろやってみたらできました。
これからもなにかあったら宜しくお願いします。