
こんにちわ。
今回、困難にぶち当たったのでご質問させて頂きます。
VB(正確にはACCESSのVBAですが)から、複数のエクセルファイルを順番に開き、中のセルをクリアする処理をしています。
ソースを下記に記載させて頂きます。
Private Sub Excel_Delete(sXlsFile As String)
Dim sXls As Workbook
Set sXls = excel.Workbooks.Open(sXlsFile, 0)
sXls.Sheets(1).Range("I7:AM3005").ClearContents
sXls.Saved = True
sXls.Save
sXls.Close
Set sxlx = Nothing
End Sub
今まで問題なく動作していたのですが、ある日、
Set sXls = excel.Workbooks.Open(sXlsFile, 0)
の部分でエラーが出ました。
↓エラー内容は下記の通りです。
実行時エラー-2147417851(80010105)
openメソッドは失敗しました ’Workbooks’オブジェクト
開くエクセルファイルは、フォルダから列挙して取得していますので、
ちゃんと存在しています。
しかも、エラーが起きるファイルは同じファイルではなく、エラーが起きない時もあります。
列挙するエクセルファイルは、日に日に増えていっていて、現在では500個
近くになっています。
数が増えてきたのが原因でしょうか?
それとも、何か根本的な間違いがあるのでしょうか。
何かわかる方がいらっしゃいましたら、よろしくお願いします。

No.1ベストアンサー
- 回答日時:
Excel のブックを開く前に、Excel のアプリケーションを起動させなきゃダメです。
Dim xlApp As Excel.Application
' Excel を起動
xlApp = New Excel.Application
' Excel を表示(表示させない場合はいらない行です)
xlApp.Visible = True
Dim xlBook As Excel.Workbook
Set xlBook = xlApp.Workbooks.Open(パス)
最後に・・・
xlApp.Quit
です。
だから質問文にあるようなプロシージャでプロシージャ内で Excel アプリケーションを開いたり閉じたりする処理を書いちゃうと、1つのブックを処理するたびに Excel を起動して終了してってなっちゃいますから、その上位で Excel アプリケーションを管理したほうが忙しくないです。
ご解答ありがとうございます。
大変申し訳ございません。解決しました。
実はとんでもない初歩的ミスでした。
Set sxlx = Nothing
の部分で、「sxls」が、「sxlx」になっていて、これを直したところ、
エラーが出なくなりました。
お騒がせしまして、本当に申し訳ありません。
temtecomai2さんのご意見も大変参考になりました。
有難うございました。
No.2
- 回答日時:
・そのエラーの出る端末に、複数のOfficeのインストールした経緯がある
・その端末でよくマクロを開発している
などの場合、レジストリが汚れて、オートメーションエラーを起こす端末になることがマレにあります。
>Dim sXls As Workbook
というのを見ると、Excelを参照設定して利用していますよね?
開発がし辛いですが、参照設定を外し、エクセル関係のオブジェクト変数をすべて[AS OBJECT]として宣言し、レイト(遅延)バインディングを利用すると、解消される場合があります。
ご解答ありがとうございます。
なるほど。参考になります。
ですが、実はとんでもない初歩的ミスでした。
Set sxlx = Nothing
の部分で、「sxls」が、「sxlx」になっていて、これを直したところ、
エラーが出なくなりました。
お騒がせしまして、本当に申し訳ありません。
有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「パス名が無効です」の発生原因
-
access テキストボックスの値取得
-
データベースソフトのアクセス2...
-
batファイルでレジストリキーの...
-
エクセルで質問です。 ハイパー...
-
エクセルマクロでエラーの原因...
-
Returnに対するGoSubがありません
-
DisplayAlertsブロパティで ”実...
-
fcloseで発生するエラーについて。
-
Excel 2003 のエラーメッセージ
-
VB6 Dir関数で52エラー発生
-
【COBOL】read文でエラー
-
fgets関数のEOFの扱い方について
-
Excel VBAのApplication.Execut...
-
ExcelVBAで既に開いてるwordを...
-
OUTLOOK VBA 指定フォルダ内の...
-
VBAでDLLが見つからないエラー
-
gccを行ってもexeファイルが生...
-
アクセスのクエリでコンパイル...
-
FTPの送信結果を検知したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【関数】同じ関数なのに、エラ...
-
access テキストボックスの値取得
-
エクセルで質問です。 ハイパー...
-
「パス名が無効です」の発生原因
-
PowerShellを使って関連付けら...
-
NAS上のファイルの使用中が解除...
-
gccを行ってもexeファイルが生...
-
アクセスのクエリでコンパイル...
-
ExcelVBAで既に開いてるwordを...
-
Returnに対するGoSubがありません
-
VB6 Dir関数で52エラー発生
-
VBでファイルが開かれているか...
-
データベースソフトのアクセス2...
-
エクセルマクロでエラーの原因...
-
fcloseで発生するエラーについて。
-
batファイルでレジストリキーの...
-
FORTRANの実行エラーについて
-
VBから参照できないCのDLLを使...
-
【COBOL】read文でエラー
-
DisplayAlertsブロパティで ”実...
おすすめ情報