フォーム上のボタンにショートカットキーを割り当てる方法を教えてください。
例えば、
AltF→Aなど連続した動作を「名前をつけて保存する」というボタンにしたいです。
「マクロの記録」はツールとして使えますか?
ボタンではなく マクロにショートカットキーの割り当てをすることができます。
つまり、フォーム上のボタンを押したときに実行されるマクロに対して ショートカットキーを割り当てれば
ボタンをクリックしたものと同様になるでしょう。
ただし Ctrl + のものにしか 割り当てはできませんが・・・
フォームというのが、VBAのユーザーフォームのことを指しているのであれば、
ユーザーフォームのkeyDownイベントに自前の処理を追加していけば、目的の動作ができるかと思います。
ユーザーフォーム上でキーを押したときはUserFormのKeyDownイベントが呼ばれます。
その第一引数のKeyCodeには押されたキーのキーコードが設定され、
第二引数のShiftという引数にはShiftキー、Ctrlキー、Altキーいずれかが押されたときに対応する値が設定されます。
Altキーだけが押されているときは引数の値が4になります。
これを使って、以下のような処理をすればよいのかなと思います。
もしAltキー押された→フラグ1をたてる →
フラグ1がたっている状態で文字キーが押された→そのキーがFならまた別のフラグ2をたてる。違っていたらフラグ1を解除 →
フラグ1とフラグ2がたっている状態で文字キーが押された→そのキーがAなら○○マクロを実行。そしてフラグ1フラグ2を解除
ちなみにExcelのシート上での場合は、KeyDownイベントが存在せず
Altキーを押した後はWindowsのメニューが優先的に処理されてしまうため、
上記方法では実現できません。
この場合はExcelの既存のメニューに独自の項目を割り当て、その項目にショートカットを設定することで対応できるかと思います。
Dim btn As CommandBarButton
Set btn = Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)").Controls.Add
btn.Caption = "独自マクロ(&R)"
btn.OnAction = "runMacro"
この場合、Alt→F→Rと押せば、メニューに表示されますが、独自のコマンドを設定できるかと思います。
ただし Ctrl + のものにしか 割り当てはできませんが・・・
というところがネックです。
でも、ありがとうございます。
他の用途で参考になります。