性格いい人が優勝

EXCEL VBA でESCキーを無効にするために、
Application.EnableCancelKey = xlDisabled
を使用していますが、
特定のフォルダ内のEXCELファイルを開いて、ある処理をして保存するといったプログラムでは、ESCキーを無効にすることができませんでした。

原因を探るために以下のテストプログラムを作成しましたが、実行中にESCキーを押すと(長押しすると確実に)
「実行時エラー'1004' openメソッドは失敗しました。'Workbooks'オブジェクト」
のメッセージが表示されて止まってしまいます。
どこに原因があるのでしょうか?
よろしくお願いします。

以下、テストプログラム //////////
Private Sub CbStart_Click()
Dim Fname As String
Dim Fpath As String

Application.ScreenUpdating = False
Application.EnableCancelKey = xlDisabled

Fpath = "d:\work\"
Fname = Dir(Fpath & "*.xlsx")

Do While Fname <> ""
Workbooks.Open Fpath & Fname
CloseWorkbook Fname
Fname = Dir()
Loop
Application.ScreenUpdating = True
End Sub
以上 //////////////////

A 回答 (3件)

そ~ですか、お役に立てずすいません


#2の補足のコードを試して見ましたが
私の環境ではエラーが出ませんので
コード的には問題無いと思われます
EXCEL2007が手元に無いので、これ以上の検証は出来ませんが

他のPCがあれば他のPCで試してみる
他のEXCELバージョンがインストールされているPCで試してみる
ファイルがサーバーやUSB等にある場合はローカルで試してみる

では失礼します
    • good
    • 0

>CloseWorkbook Fname


これはどのような処理をしているのでしょう?
これが怪しい気がします

試しに下記のように変更して実行してみてください
'CloseWorkbook Fname 'コメントアウト
ActiveWorkbook.Close '追加

これでエラーが出ないようであれば
CloseWorkbookの中のコードが原因ではと思います

上記の変更をして、私の環境(excel2000ですが)では[ESC]キーを押しても
最後まで実行されます

参考まで

この回答への補足

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

>>CloseWorkbook Fname
>これはどのような処理をしているのでしょう?
>これが怪しい気がします

すみません。
うっかり、自作のサブルーチンを使用していました。
ちなみに、CloseWorkbook は指定のファイルが開いていればクローズする処理をしています。
///////// CloseWorkbook ///////////////////////
Sub CloseWorkbook(ByVal wbName As String)
If isOpenWorkbook(wbName) = True Then
Workbooks(wbName).Close savechanges:=False '強制終了
End If
End Sub
///////// ここまで ///////////////////////////

>試しに下記のように変更して実行してみてください
>'CloseWorkbook Fname 'コメントアウト
>ActiveWorkbook.Close '追加

改めて、新しいブックのシートにボタンコントロールを張り付けて以下のコードで実行しました。
////////// ここから //////////////////////////
Private Sub CbStart_Click()
Dim Fname As String
Dim Fpath As String

Application.ScreenUpdating = False
Application.EnableCancelKey = xlDisabled

Fpath = "d:\work\"
Fname = Dir(Fpath & "*.xlsx")

Do While Fname <> ""
Workbooks.Open Fpath & Fname
ActiveWorkbook.Close
Fname = Dir()
Loop
Application.ScreenUpdating = True
End Sub
////////// 以上 //////////////////////////////
d:\work フォルダには13個のワークシート(小さな表があるだけ)を入れて実行したのですが、やはり[ESC]キーを押すと(長押しすると確実に)
「実行時エラー1004 Openメソッドは失敗しました。Workbooksオブジェクト」
のエラーメッセージが表示されて、
「Workbooks.Open Fpath & Fname」
の行で停止します。(環境はExcel2007です。)

たびたびすみませんが、よろしくお願いします。

補足日時:2010/01/23 17:49
    • good
    • 0

>「実行時エラー'1004' openメソッドは失敗しました。

'Workbooks'オブジェクト」
このエラーは
>実行中にESCキーを押すと(長押しすると確実に)
この操作とは関係ないと思いますが
試しに、ESCキーを押さずに処理する、或いは
>Application.EnableCancelKey = xlDisabled
のコードを削除してみると
エラーは出ないのでしょうか?

この回答への補足

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

>試しに、ESCキーを押さずに処理する、或いは
>Application.EnableCancelKey = xlDisabled
>のコードを削除してみると
>エラーは出ないのでしょうか?

ESCキーを押さなければ、指定フォルダのファイルのオープンとクローズが正常に行われます。(エラーは出ません)

>Application.EnableCancelKey = xlDisabled
のコードを削除しても同じように正常に処理が行われ、途中でESCキーを押すと、「コードの実行が中断されました」のエラーメッセージが表示されて止まります。

よろしくお願いします。

補足日時:2010/01/16 23:44
    • good
    • 0

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