お世話になります。
UserForm に GotoNextItem というボタンがあり、そこをクリックすると proc_GotoNextItem というマクロを実行することにして、うまくいっています。
同じ動作を、ショートカットキー Shift+Ctrl+Nでも行わせようと思い、下のように書いてみたのですが、うまくいきません。
(ウンともスンともいいません)
何かわかるでしょうか?
よろしくお願いします。
Private Sub GotoNextItem_Click()
proc_GotoNextItem
End Sub
Private Sub UserForm_Initialize()
MsgBox "start"
Application.OnKey "^+{n}", "proc_GotoNextItem"
End Sub
Private Sub UserForm_Terminate()
Application.OnKey "^+{n}"
End Sub
Public Sub proc_GotoNextItem()
MsgBox "GotoNextItem!"
End Sub
フォームにボタンがあるなら Acceratator でいいじゃんと言われそうですが、フォームにフォーカスがないときがあり(それでも早見表代わりに ShowModal=False で表示させておこうと思います)それでも実行したいと思ったからです。
なお、Onkey の代わりに、
Application.MacroOptions HasShortcutKey:=True, ShortcutKey:="N"
などと書くと、
「表示されていないマクロは編集されていません、[ウィンドウ再表示]を表示して、ウィンドウを表示してください」
と言われます。
よろしくお願いします!
お礼
なるほど! マクロ設定でショートカットを登録できることは知っていましたが、他の人に配布するので VBA でやりたかったんです。 マクロを設定するところを別のマクロに登録すればよかったんですね! 2007でもできました!以下のようです。 Application.MacroOptions Macro:="bookName.XLSB!proc_GotoNextItem", _ Description:="", ShortcutKey:="N" この bookName.XLSB! の部分を、同じブックの Public サブルーチンを呼び出しているので削除しましたが、なぜか削除すると動きません。 (_Application オブジェクトは失敗しました、と言われます) でも、これは書くことにすれば問題ないですね。 あとちょっと問題があって、ダイアログがフォーカスがない場合は Shift+Ctrl+N で行くんですが、ダイアログにフォーカスがある場合は(ダイアログがフォーカスを取るので?)使えません。 現在はボタンにアクセラレーターを割り当てているので、ダイアログにフォーカスがあるときは Alt+N になっています。 ちょっとややこしいですね (^^;;; とまれ、ありがとうございました!
補足
自作自演ですみません。 以前別件で教えてもらった F1 でヘルプを表示させる方法 http://okwave.jp/qa4725338.html の応用でダイアログにフォーカスがあるときも Shift+Ctrl+N でマクロを呼び出すことができました。 ダイアログにフォーカスがないときはo_chi_chiさんに教えていただいたやりかたでバッチグーです。 ということで全部解決しました!!! ありがとうございます!!!