2016-07-28 90 views
1

ほとんどの質問は以下の通りです何とか奇妙な行動している - イミディエイトウィンドウに私が手にする理由この:VBAは - Application.EnableCancelKeyは

Application.EnableCancelKey = 2 
?Application.EnableCancelKey 
1 

最後の行が2であるべきか、私は何かが足りないのですか? ありがとう!

+0

私はこの約100%わからないんだけど、私はこれが唯一のあなたの現在の手続きが中断されたことを示していると思います。 –

+0

私は、イミディエイトウィンドウで2 - (xlErrorHandler)を最初の行に設定すると、2番目のチェックでなぜ1 - (xlInterrupt)を返すのでしょうか。 – Vityata

+1

おそらく私は不明であった:実際の手続きが今中断されたので、それが「1」を返すとは思うが(確かではない)設定した値は書き込まれませんが、現在の状態の値が書き込まれます。 "_ xlInterrupt 1: 現在のプロシージャは中断され、ユーザーはデバッグまたはプロシージャを終了することができます._" –

答えて

1

編集:

基礎が列挙xlErrorHandlerは、「のOn Error GoToステートメントを使用して設定エラーハンドラによってトラップ可能な、割り込みがエラーとして実行されている手順に送られる」と述べているということです、その列挙型(xlErrorHandlerまたは2)を使用するにはエラーハンドラが必要です。

Since some statements are not possible within the immediate window、およびOn Error GoToは、これらの文の一つであり、あなたは、イミディエイトウィンドウにエラーハンドラを持っているので、2EnableCancelKeyの値を変更することはできません。したがって、Excelでは自動的に1に切り替わり、値を表示するように要求すると値1が表示されます。

唯一の解決策は、サブを使用することです。


オリジナルの返信:

[OK]を、私はdocumentation provided on the MSDNのコードを使用し、次のコードでそれをテストするためのいくつかのことを編集しました。

まもなく説明すると、「ESC」ボタンを1回押してテキストボックスを終了させないようにして実行を停止しました。イミディエイトウィンドウで、最後のEnableCancelKeyが値normalyで変更されたことを見ることができます。

Sub Test1() 

Debug.Print " Before execution result : " & Application.EnableCancelKey 

On Error GoTo handleCancel 
Application.EnableCancelKey = 2 'xlErrorHandler 
Debug.Print " Regular execution result : " & Application.EnableCancelKey 

For x = 1 To 10000 ' Do something 1,000,000 times (long!) 
    Debug.Print "Test" 
Next x 

handleCancel: 
If Err = 18 Then 
    Debug.Print "Aborted macro result : " & Application.EnableCancelKey 
    MsgBox "You cancelled" 
End If 

End Sub 

希望する結果が得られました。

2つの値を得るにはError Handlerと書く必要があります。それ以外の場合、コードはエラーをキャッチできません。そのため、マクロを実行するたびに1が得られます。

enum xlErrorHandlerの説明では「実行中のプロシージャにエラーが発生したときに割り込みが送信され、On Error GoToステートメントで設定されたエラーハンドラでトラップできます」という記述があるため、そのエラーハンドラを使用する必要があります列挙型。それが動作するはずです。これにより

Sub test2() 

On Error GoTo theEnd 
Application.EnableCancelKey = 2 
Debug.Print Application.EnableCancelKey 

theEnd: 
End Sub 
+0

ええと、正確には? 2および1? –

+0

ええ、クールですが、それはなぜ直感的なウィンドウで変わらないのですか? – Vityata

+0

私が 'xlDisabled'を入力したとき、結果は' 0'でした。 'xlInterrupt'が与えられたときにマクロの実行を止めることができませんでした。' 1'を取得し、マクロは止まった場所で停止し、 'xlErrorHandler'私は「2」を得て、「あなたはキャンセルしました」というメッセージを出しました。これらすべての結果は、途中でイミディエイトウィンドウに表示されました。 –