アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちわ。
今回、困難にぶち当たったのでご質問させて頂きます。

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個
近くになっています。
数が増えてきたのが原因でしょうか?
それとも、何か根本的な間違いがあるのでしょうか。
何かわかる方がいらっしゃいましたら、よろしくお願いします。

A 回答 (2件)

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 アプリケーションを管理したほうが忙しくないです。
    • good
    • 0
この回答へのお礼

ご解答ありがとうございます。

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

お礼日時:2006/06/01 20:12

・そのエラーの出る端末に、複数のOfficeのインストールした経緯がある


・その端末でよくマクロを開発している
などの場合、レジストリが汚れて、オートメーションエラーを起こす端末になることがマレにあります。


>Dim sXls As Workbook
というのを見ると、Excelを参照設定して利用していますよね?
開発がし辛いですが、参照設定を外し、エクセル関係のオブジェクト変数をすべて[AS OBJECT]として宣言し、レイト(遅延)バインディングを利用すると、解消される場合があります。
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/06/01 20:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!