• ベストアンサー

エクセルファイルが開けない

こんにちわ。 今回、困難にぶち当たったのでご質問させて頂きます。 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 アプリケーションを管理したほうが忙しくないです。

takeru427
質問者

お礼

ご解答ありがとうございます。 大変申し訳ございません。解決しました。 実はとんでもない初歩的ミスでした。 Set sxlx = Nothing の部分で、「sxls」が、「sxlx」になっていて、これを直したところ、 エラーが出なくなりました。 お騒がせしまして、本当に申し訳ありません。 temtecomai2さんのご意見も大変参考になりました。 有難うございました。

その他の回答 (1)

回答No.2

・そのエラーの出る端末に、複数のOfficeのインストールした経緯がある ・その端末でよくマクロを開発している などの場合、レジストリが汚れて、オートメーションエラーを起こす端末になることがマレにあります。 >Dim sXls As Workbook というのを見ると、Excelを参照設定して利用していますよね? 開発がし辛いですが、参照設定を外し、エクセル関係のオブジェクト変数をすべて[AS OBJECT]として宣言し、レイト(遅延)バインディングを利用すると、解消される場合があります。

takeru427
質問者

お礼

ご解答ありがとうございます。 なるほど。参考になります。 ですが、実はとんでもない初歩的ミスでした。 Set sxlx = Nothing の部分で、「sxls」が、「sxlx」になっていて、これを直したところ、 エラーが出なくなりました。 お騒がせしまして、本当に申し訳ありません。 有難うございました。

関連するQ&A