こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VS2005でExcel操作でエラーが

ご教授をよろしくお願いいたします。
現在、VS2005のBasicを使用してExcel操作のシステムを作っています。
行う事は、指定のExcelファイルをオープンし、指定のシートのセルにあるデータを格納してそのまま上書き保存をするだけです。

参照設定の追加
Microsoft Excel 11.0 Object Library

以下がそのソースの抜粋です。
Dim objExcel As Microsoft.Office.Interop.Excel.Application
Dim objExcelBook As Microsoft.Office.Interop.Excel.Workbook
Dim objExcelSheet As Microsoft.Office.Interop.Excel.Worksheet

objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
objExcelBook = objExcel.Workbooks.Open(FileName)
objExcelSheet = objExcelBook.Worksheets(SheetName)
objExcelSheet.Cells(row, col).Value = intData

objExcel.DisplayAlerts = False
objExcelBook.SaveAs(FileName)

開発環境はXP Pro SP2/VS2005/Visual Basic/Excel2003です。
開発環境で試験をした時はちゃんとファイルが保存されて正常に処理が完了するのですが、セットアッププログラム(VS付属のインストーラー)で別のパソコンにインストールしたプログラムは、以下のエラーが発生します。
「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れている事が考えられます」
違う環境のパソコンの複数台に試したのですが、同じ現象でした。
(Windows2000/XP/Excel2000/Excel2003)

もちろん、Excelでそのファイルを開いている状態でシステムを起動したり、ファイルにロックが掛かっている状態で無い事も確認しました。
読み取り専用の属性もファイルにはありません。

同じような現象を経験した方がいらっしゃれば是非とも情報をよろしくお願いいたします。

投稿日時 - 2006-11-01 09:23:03

QNo.2510593

困ってます

質問者が選んだベストアンサー

こんばんは。

> 違う環境のパソコンの複数台に試したのですが、同じ現象でした。

Microsoft Excel 11.0 Object Library が参照不可なら

> Dim objExcel As Microsoft.Office.Interop.Excel.Application
> Dim objExcelBook As Microsoft.Office.Interop.Excel.Workbook
> Dim objExcelSheet As Microsoft.Office.Interop.Excel.Worksheet

このコードはエラーになりそうな気がしますけど…参照パスが違うのでは?

> objExcel = CreateObject("Excel.Application")

このコードなら参照設定は解除して、変数を Object 型に変えてみたら?
確認してませんが。

余談ですが・・・

> objExcelSheet.Cells(row, col).Value = intData

row も col も Excel VBA の予約語なので今のうちに変更しておいた方が
良いですよ。

lRow とか。

投稿日時 - 2006-11-05 01:22:31

お礼

KenKen_SP様、的確な回答をありがとうございます。

>このコードなら参照設定は解除して、変数を Object 型に
>変えてみたら?確認してませんが。

まさにその通りです。
Dim objExcel As Microsoft.Office.Interop.Excel.Application
Dim objExcelBook As Microsoft.Office.Interop.Excel.Workbook
Dim objExcelSheet As Microsoft.Office.Interop.Excel.Worksheet

Dim objExcel As System.Object
Dim objExcelBook As System.Object
Dim objExcelSheet As System.Object
に変更したらエラーがなくなりました。

本当にありがとうございました。
また、row/colについてのアドバイスもありがとうございました。

的確なアドバイスに非常に感謝しております。

投稿日時 - 2006-11-05 07:45:07

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問