ほとんどの質問は以下の通りです何とか奇妙な行動している - イミディエイトウィンドウに私が手にする理由この:VBAは - Application.EnableCancelKeyは
Application.EnableCancelKey = 2
?Application.EnableCancelKey
1
最後の行が2であるべきか、私は何かが足りないのですか? ありがとう!
ほとんどの質問は以下の通りです何とか奇妙な行動している - イミディエイトウィンドウに私が手にする理由この:VBAは - Application.EnableCancelKeyは
Application.EnableCancelKey = 2
?Application.EnableCancelKey
1
最後の行が2であるべきか、私は何かが足りないのですか? ありがとう!
編集:
基礎が列挙xlErrorHandler
は、「のOn Error GoToステートメントを使用して設定エラーハンドラによってトラップ可能な、割り込みがエラーとして実行されている手順に送られる」と述べているということです、その列挙型(xlErrorHandler
または2
)を使用するにはエラーハンドラが必要です。
Since some statements are not possible within the immediate window、およびOn Error GoTo
は、これらの文の一つであり、あなたは、イミディエイトウィンドウにエラーハンドラを持っているので、2
にEnableCancelKey
の値を変更することはできません。したがって、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
ええと、正確には? 2および1? –
ええ、クールですが、それはなぜ直感的なウィンドウで変わらないのですか? – Vityata
私が 'xlDisabled'を入力したとき、結果は' 0'でした。 'xlInterrupt'が与えられたときにマクロの実行を止めることができませんでした。' 1'を取得し、マクロは止まった場所で停止し、 'xlErrorHandler'私は「2」を得て、「あなたはキャンセルしました」というメッセージを出しました。これらすべての結果は、途中でイミディエイトウィンドウに表示されました。 –
私はこの約100%わからないんだけど、私はこれが唯一のあなたの現在の手続きが中断されたことを示していると思います。 –
私は、イミディエイトウィンドウで2 - (xlErrorHandler)を最初の行に設定すると、2番目のチェックでなぜ1 - (xlInterrupt)を返すのでしょうか。 – Vityata
おそらく私は不明であった:実際の手続きが今中断されたので、それが「1」を返すとは思うが(確かではない)設定した値は書き込まれませんが、現在の状態の値が書き込まれます。 "_ xlInterrupt 1: 現在のプロシージャは中断され、ユーザーはデバッグまたはプロシージャを終了することができます._" –