こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

VBAでESCキーを無効にしたいのですが、うまくいきません。

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
以上 //////////////////

投稿日時 - 2010-01-16 21:50:53

QNo.5598300

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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

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

では失礼します

投稿日時 - 2010-01-24 21:06:58

ANo.2

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

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

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

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

参考まで

投稿日時 - 2010-01-18 12:57:48

補足

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

>>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:49

ANo.1

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

投稿日時 - 2010-01-16 23:36:50

補足

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

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

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

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

よろしくお願いします。

投稿日時 - 2010-01-16 23:44:38

あなたにオススメの質問