こんにちわ。
今回、困難にぶち当たったのでご質問させて頂きます。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Returnに対するGoSubがありません
-
【COBOL】read文でエラー
-
「アクティブ ユーザーが多すぎ...
-
FTPの送信結果を検知したい
-
VBでファイルが開かれているか...
-
Access2010 コンパイルエラー...
-
エクセル VBA dll 読み込...
-
batファイルでレジストリキーの...
-
アクセスのクエリでコンパイル...
-
VB6 Dir関数で52エラー発生
-
イベントが発生しない vba
-
ExcelVBAで既に開いてるwordを...
-
FORTRANの実行エラーについて
-
RAR圧縮ファイル(分割)の順番が...
-
VB:「実行時エラー53 実行ファ...
-
gccを行ってもexeファイルが生...
-
ファイルクローズ(fclose)でエ...
-
fgets関数のEOFの扱い方について
-
[VBS]ファイルコピーで怪奇現象
-
freadでデータがない場合の読込...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBでファイルが開かれているか...
-
batファイルでレジストリキーの...
-
gccを行ってもexeファイルが生...
-
「パス名が無効です」の発生原因
-
Returnに対するGoSubがありません
-
アクセスのクエリでコンパイル...
-
NAS上のファイルの使用中が解除...
-
VBから参照できないCのDLLを使...
-
PowerShellを使って関連付けら...
-
Adobeのプレミアプロの書き出し...
-
EXCELのVBAでWORDが開いてある...
-
FTPの送信結果を検知したい
-
access テキストボックスの値取得
-
エクセルマクロでエラーの原因...
-
【COBOL】read文でエラー
-
VB6 Dir関数で52エラー発生
-
VBA ExecuteExcel4Macro 型が一...
-
Access2013にてドラッグ&ドロ...
-
freadでデータがない場合の読込...
-
ファイルクローズ(fclose)でエ...
おすすめ情報