イミディエイト・ウィンドウをクリアする(キーボード・ショートカット)
- イミディエイト・ウィンドウにカーソルを移動(Ctrl+Gでフォーカスを移動できる)
- Ctrl+A
- Delete
イミディエイト・ウィンドウをクリアする(コード)
イミディエイト・ウィンドウをクリアするコードをAPIのSendInput Functionを使って書いてみた。
キー送信のサンプルというとSendKeyを使うコードや、APIでもkeybd_eventやGetKeyboardState/SetKeyboardStateを使うものが多いと思う。
SendInputの良いところは、キーの設定を一度に処理するので、ひとつひとつキー送信するのに比べて安全なこと。
APIを使っているので難しそうに見えるかもしれないけれど、やっていることはCtrl + g + a + Delete の4つのキーをまとめて送信しているだけ。
Option Explicit
Type INPUT_TYPE dwType As Long xi(0 To 23) As Byte End Type
Type KEYBDINPUT wVk As Integer wScan As Integer dwFlags As Long time As Long dwExtraInfo As Long End Type
Declare Function SendInput Lib "user32" _ (ByVal nInputs As Long, pInputs As INPUT_TYPE, _ ByVal cbSize As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (Destination As Any, Source As Any, ByVal Length As Long)
Const INPUT_KEYBOARD = 1 Const KEYEVENTF_KEYUP = &H2 Const VK_CONTROL = &H11
Sub prcClearIM()
Dim inputevents(0 To 7) As INPUT_TYPE Dim keyevent As KEYBDINPUT Dim myArray As Variant Dim n As Integer
'Set key name to send myArray = Array(VK_CONTROL, vbKeyG, vbKeyA, vbKeyDelete)
For n = 0 To UBound(myArray) keyevent.wVk = myArray(n) 'key name keyevent.wScan = 0 keyevent.dwFlags = 0 '0 means press the key down keyevent.time = 0 keyevent.dwExtraInfo = 0 inputevents(n).dwType = INPUT_KEYBOARD CopyMemory inputevents(n).xi(0), keyevent, Len(keyevent) Next
For n = 0 To UBound(myArray) keyevent.wVk = myArray(n) keyevent.wScan = 0 keyevent.dwFlags = KEYEVENTF_KEYUP 'release the key keyevent.time = 0 keyevent.dwExtraInfo = 0 inputevents(n + UBound(myArray) + 1).dwType = INPUT_KEYBOARD CopyMemory inputevents(n + UBound(myArray) + 1).xi(0), keyevent, Len(keyevent) Next
'place the events into the stream SendInput n + UBound(myArray) + 1, inputevents(0), Len(inputevents(0))
End Sub
プロシージャ(prcClearIM)を直接実行して使うか、別のプロシージャの中からコールして使う。
ただしコード内でコールして使うときはステップモードで実行するか、ブレークポイントを設定すること。コード内でコールするとSendInputがコード全体が終わってから実行されるため、コード内に設定しているDebug.Printの結果が全てクリアされる意味のない結果になってしまう。
使い方のサンプルコードはこんな感じ。
Sub Main_Sample()
Debug.Print "ブレークポイントを設定する前は見えません。"
Call prcClearIM
Debug.Print Now 'ここにブレークポイントを設定する Debug.Print "ブレークポイントを設定すると、このメッセージが見えます。"
End Sub
FaceIdを一覧表示
メニューバーやツールバーを自作するときに使うFaceIDの一覧を簡単に参照する方法はないかと思って検索していたら、すばらしいコードを見つけた。
検索した結果、予め作成してあるGIFを一覧表として表示するものがほとんどだった中、これはCommandBarsを使ってFaceIDをコントロールボタンとして追加して表示している。コード自体が参考になるのはもちろんのこと、「自由にコピーして各自のマクロにコピーしても構いません」という親切さ。
2001年の作品のようだが、Excel2002でも問題なく使えた。
