Excel 2007 VBA マクロにショートカットを割り当てる

このQ&Aのポイント
  • VBAマクロを使用してExcel 2007でショートカットキーを設定する方法
  • Excel 2007のUserFormにGotoNextItemボタンを追加し、ボタンをクリックするとマクロが実行される仕組みについての質問
  • UserFormがフォーカスされていない場合でもショートカットキーを使用してマクロを実行する方法についての質問
回答を見る
  • ベストアンサー

Excel 2007 VBA マクロにショートカットを割り当てる

お世話になります。 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" などと書くと、 「表示されていないマクロは編集されていません、[ウィンドウ再表示]を表示して、ウィンドウを表示してください」 と言われます。 よろしくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

EXCEL2000ですが ツールのマクロ→マクロで マクロ(proc_GotoNextItem)を選択しオプション でショートカットを登録できてましたが、2007ではなくなったのでしょうか。 マクロで登録なら下記のとおり Application.MacroOptions Macro:="proc_GotoNextItem", ShortcutKey:="N"

TYWalker
質問者

お礼

なるほど! マクロ設定でショートカットを登録できることは知っていましたが、他の人に配布するので VBA でやりたかったんです。 マクロを設定するところを別のマクロに登録すればよかったんですね! 2007でもできました!以下のようです。 Application.MacroOptions Macro:="bookName.XLSB!proc_GotoNextItem", _ Description:="", ShortcutKey:="N" この bookName.XLSB! の部分を、同じブックの Public サブルーチンを呼び出しているので削除しましたが、なぜか削除すると動きません。 (_Application オブジェクトは失敗しました、と言われます) でも、これは書くことにすれば問題ないですね。 あとちょっと問題があって、ダイアログがフォーカスがない場合は Shift+Ctrl+N で行くんですが、ダイアログにフォーカスがある場合は(ダイアログがフォーカスを取るので?)使えません。 現在はボタンにアクセラレーターを割り当てているので、ダイアログにフォーカスがあるときは Alt+N になっています。 ちょっとややこしいですね (^^;;; とまれ、ありがとうございました!

TYWalker
質問者

補足

自作自演ですみません。 以前別件で教えてもらった F1 でヘルプを表示させる方法 http://okwave.jp/qa4725338.html の応用でダイアログにフォーカスがあるときも Shift+Ctrl+N でマクロを呼び出すことができました。 ダイアログにフォーカスがないときはo_chi_chiさんに教えていただいたやりかたでバッチグーです。 ということで全部解決しました!!! ありがとうございます!!!

関連するQ&A

  • エクセルVBA フォーム上でOnkeyがうまく出来ない

    エクセルVBAでプログラムをしています。 Application.Onkeyでショートカットを指定したいのですがフォーム上ではうまく指定できません。 フォーム上での指定は不可能なんでしょうか? ショートカットを認識するケース 標準モジュールに Sub test2() MsgBox "test2" End Sub Sub Auto_Open() Application.OnKey "{b}", "test2" End Sub としてシート上で「b」を押した場合はうまくいきます。 ショートカットを認識しないケース 標準モジュールに Sub test() MsgBox "test" End Sub UserForm1フォームに Private Sub UserForm_Initialize() Application.OnKey "{a}", "test" End Sub としてフォームをロード(表示)して「a」を押しても何もおきません。 またフォームが表示されている状態で「b」を押しても何もおきません。 上記のコードはテストで作ったものなのでこれ以外はフォームを開く文以外何も書いておりませんので他との兼ね合いではないと思います。 どうすれば思ったとおりの動作になるのでしょうか? そもそもOnkeyはユーザフォームがアクティブのときは動かないのでしょうか? 動かない場合、フォームがアクティブなときのみフォームごとに違う関数を呼ぶショートカットを作る方法はありませんでしょうか? (コントロールごとにkey_downイベントで確認する方法はコントロールの数が各100個ほどあるのと、フォームが10個以上あるため出来ればやりたくありません。) 環境はwinXP、excel2003です。 よろしくお願いいたします。

  • 文法 何がおかしい? VBAです

    エクセルを開いたときに、 ユーザーフォームのモーダルモードにしたくないのですが それをvbaで設定したいのですが Private Sub UserForm_Initialize() Me.Showmodal = False End Sub ではダメなのでしょうか? エラーになってしまいます。

  • ユーザーフォームの入力時のマクロについて

    いつもお世話になります。 Windows7 excell2010 です。 今まさにVBAをやり出してあまりわかっていませんが下記のようにまでになったところです。 ご指導をいただきたいのは、 参照図にあるUserForm1に入力するとき、 「日付」 ime が 半角数値 「顧客名」ime が ひらがな 「売上」 ime が 半角数値 を自動的にする マクロ を記述したいです。 ご指導いたたければ幸いです。 下記のようなマクロが記述されています。 ※UserForm1 コード表示 Private Sub CommandButton1_Click() n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.TextBox2.Text Cells(n, 3) = UserForm1.TextBox3.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub ※標準モジュール Sub FormSample() Do UserForm1.Show Loop End Sub Sub Test() MsgBox "ボタンによるマクロの実行" End Sub

  • Excel VBAで、ユーザーフォームの値を、モジュールで使用したい。

    VBA初心者です。(おそらく)基本的な質問で、申し訳ありません。 ユーザーフォーム1には、テキストボックス1とコマンドボタン1が配置されているとします。 Sub TEST () Dim N Userform1.Show MsgBox N End Sub Private Sub CommandButton1_Click() Dim N N = TextBox1.Text UserForm1.Hide End Sub Sub TESTを実行した時に、ユーザーフォーム1からNの値を引き継ぐには、どうしたら良いのでしょうか?よろしくお願いします。

  • エクセルVBA

    ユーザーフォームのテキストボックスに現在時間を表示し、表示を時計のように現在時刻を表示し続ける方法を教えてください。 以下は現在のコマンドです。 Private Sub txtTime_Change() End Sub Private Sub UserForm_Initialize() UserForm1.txtTime.Value = Time End Sub よろしくお願いします。

  • Excel2010でエンターキーにマクロ割り当て

    時間入力を何分何秒をシリアル値に変換するマクロを作って使用していますが、 エンターキーに割り当てが出来ないのでカーソルキーの「↓」を割り当てています。 本当は「1234」と入力してエンターキーを押せばマクロが実行されそのセルに 12:34というシリアル値を入力したいのです。 エンターキーへの割り当ての仕方を教えてください。 ブックが開かれたら実行されるマクロで Private Sub Workbook_Open() Application.OnKey Key:="{ENTER}", Procedure:="時間変換" End Sub ではエンターキーで"時間変換"マクロは実行されず Private Sub Workbook_Open() Application.OnKey Key:="{DOWN}", Procedure:="時間変換" End Sub ではカーソルキー「↓」で"時間変換"マクロは実行されます。 何がいけないのでしょうか? どうか分かる方、アドバイスをお願い致します。

  • エクセルVBAのマクロ文について

    エクセルVBAで、シート上のボタン(フォーム)をクリックすると、UserForm1が表示されてその中のTextBoxに別のシートのセルに入力したいる値を表示させたくて、以下のようにボタン(フォーム)にマクロを入力したのですが、エラーがでてきてうまくいきません。 入力したマクロが間違っているのでしょうか? Sub ボタン1_Click() UserForm1.Show UserForm1.TextBox1 = Sheets("入力").Ranges("D11").Value End Sub すみませんが、ご存知の方、教えてくださいませんか?

  • エクセルVBA テキストボックス

    いつもお世話になっております。 エクセルでVBAを使いユーザーフォームのテキストボックスで 文章入力をしようと思っているのですが、少しトラブルがありましたのでお教え願います。 エクセルシートの横がa~k、縦を9~34までのシートを結合して その中にテキストボックスで入力した文章を入れるように作っています。 MultiLineとEnterKeyBehaviorをTrueにして Private Sub CommandButton1_Click() Unload Me End Sub Private Sub TextBox1_Change() Sheets("sheet1").Range("a9") = UserForm1.TextBox1 End Sub Private Sub UserForm_Initialize() TextBox1.Value = Range("a9").Value End Sub Private Sub UserForm_Activate() With Me .Left = Application.Left .Top = Application.Top .Left = .Left + 350 .Top = .Top + 80 End With End Sub という状態になっているのですが、文章を入力して16行目で改行するとシートの方で「#VALUE!」と出てきてしまうので一旦ユーザーフォームを閉じてもう一度フォームを立ち上げると 「実行時エラー’-2147352571(80020005) Valueプロパティが設定できません。種類が一致しません。」 と出てきます。 デバッグすると  Private Sub CommandButton1_Click() → UserForm1.Show  End Sub と出てきます。 なにがおかしいのでしょうか? 今回初めてVBAを作っているので初歩的な間違いかもしれませんがよろしくお願いします

  • ユーザーフォームVBAでCells(n, 7)が

    いつもお世話になります Windows7 excell2010 です ご指導を仰ぎたいのは参照図で言うと、 TextBox1~6 は順調に入力しますがTextBox7にすると「入力」に飛び 参照図のG13に入力されません。 VBAを勉強し始めたはかりですのでどこが悪いかわかりません。 恐れ入りますがご指導願えませんでしょうか。 下記参考にします。 Module のコードには Sub FormSample() Do UserForm1.Show Loop End Sub Sub Test() MsgBox "ボタンによるマクロの実行" End Sub UserForm1 Private Sub CommandButton1_Click() n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.TextBox2.Text Cells(n, 3) = UserForm1.TextBox3.Text Cells(n, 4) = UserForm1.TextBox4.Text Cells(n, 5) = UserForm1.TextBox5.Text Cells(n, 6) = UserForm1.TextBox6.Text Cells(n, 7) = UserForm1.TextBox7.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • 同じマクロ名でも、違うモジュールならエラーにならな

    同じマクロ名でも、違うモジュールならエラーにならない? エクセルVBAについてご教授ください。 標準モジュールに ――――――――― Option Explicit Sub CommandButton1_Click() MsgBox "" End Sub Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― と同じマクロ名を2つ作ったら、コンパイルエラーになりますが、 上記のコードは一度消して、フォームモジュールに ――――――――― Private Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作り、 標準モジュールに ――――――――― Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作った場合は、エラーにならずにマクロを実行できました。 これは、フォームモジュールがPrivate Subだからでしょうか? フォームモジュールに1つ、 標準モジュールに1つ なら同じマクロ名を使っても、エラーにならないという事でしょうか? よろしくお願いします。

専門家に質問してみよう