エクセルマクロを割り当てたツールバー

このQ&Aのポイント
  • エクセルマクロでCtrl+Tabと同じ動作をするツールバーを作成しました。今回はCtrl+Shift+Tab(ActivatePrevious)と同じ動作を実現したいと思っています。
  • 通常のボタンを押した場合はCtrl+Tabの機能が動きますが、Shiftを押しながらボタンを押すとCtrl+Shift+Tabの機能が動くようにしたいです。
  • 要件としてはShiftが押されているかどうかの情報を取得する必要があります。情報が取得できれば、マクロで処理を変更することができます。
回答を見る
  • ベストアンサー

エクセルマクロを割り当てたツールバー

エクセルマクロでActivateNextを使ってCtrl+Tabと同じ動作をするツールバーを作りました。 このツールバーを使ってCtrl+Shift+Tab(ActivatePrevious)と同じ動作をさてたいと思っています。 通常はボタンを押すとActivateNextが動き、Shiftを押しながらボタンを押すとActivatePreviousが動くようにしたいのです。 プレビューボタンはShiftを押しながらボタンを押すと印刷ボタンになりますよね。 イメージまで変わらなくてもいいです。処理だけでも変えたいです。 Shiftが押されているって情報がマクロに渡せれば良いのでしょうが・・・。 Sub ウインドウ切替(kbn)   If kbn = 1 Then     ActiveWindow.ActivatePrevious   Else     ActiveWindow.ActivateNext   End If End Sub そのような情報って取得できるのでしょうか?[Excel2000]

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

  • ベストアンサー
  • arata
  • ベストアンサー率49% (139/279)
回答No.1

Windows APIのGetAsyncKeyStateを使うとキーボードの状態が取得できます。 実際のコーディングはこんな感じでしょうか。 Option Explicit Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Public Sub ウインドウ切替() If GetAsyncKeyState(vbKeyShift) <> 0 Then 'Shiftキーが押されている ActiveWindow.ActivatePrevious Else 'Shiftキーは押されていない ActiveWindow.ActivateNext End If End Sub

Masazo-
質問者

お礼

回答ありがとうございます。 今までAPIという言葉に対し、目を伏せていました。 APIを使うと何でもできるってイメージがあるのですが、何ができるか知らない為、発想が行き着きません。 避けつづけるのも、そろそろ限界かもしれませんね。。。

Masazo-
質問者

補足

実際にAPI関数を宣言し、作成したところ実現しました。 ただ、エクセルマクロのみでは出来ないものなのでしょうか?

関連するQ&A

  • PowerPointでマクロをショートカットキーに割り当てる方法

    現在、エクセルで以下のようなマクロをアドインとして作成して、「CTRL+,」と「CTRL+.」で表示倍率を変えれるようなショートカットを割り当ててます。 同じことをパワーポイントでアドインを作成してやろうとすると、Application.OnKeyのところでエラーになってしまいます。同じVBAでも違うんでしょうか。 PowerPointで同じことをやろうとするとどうすればいいでしょうか? ご存知の方がいらっしゃれば教えてください。 ==================================================== Option Explicit Sub auto_open() Start 1 End Sub Sub Start(num%) Dim myBar As CommandBar Dim myCtrl As CommandBarControl Application.OnKey "^{.}", "Zoomup" Application.OnKey "^{,}", "Zoomdown" End Sub Sub Zoomup() If ActiveWindow.Zoom < 390 Then ActiveWindow.Zoom = ActiveWindow.Zoom + 5 End If End Sub Sub Zoomdown() If ActiveWindow.Zoom > 10 Then ActiveWindow.Zoom = ActiveWindow.Zoom - 5 End If End Sub

  • Excel、マクロの記録、ショートカットキーが使えません

    Excelで下記のようにマクロの記録をしました。 1. Sub 改ページ() '表示-改ページのマクロです。 ' 改ページ Macro ' マクロ記録日 : 2009/11/26 ユーザー名 : ' ' Keyboard Shortcut: Ctrl+a ' ActiveWindow.View = xlPageBreakPreview End Sub 2. Sub 標準() '表示-標準のマクロです。 ' 標準 Macro ' マクロ記録日 : 2009/11/26 ユーザー名 : ' ' Keyboard Shortcut: Ctrl+z ' ActiveWindow.View = xlNormalView End Sub 3. Sub 改ページ範囲() '改ページ範囲を設定するマクロです。 ' 改ページ範囲 Macro ' マクロ記録日 : 2009/11/26 ユーザー名 : ' ' Keyboard Shortcut: Ctrl+q ' ActiveSheet.PageSetup.PrintArea = "$A$1:$P$27" End Sub ここで、1及び2についてはショートカットキーが使えるのですが、 3のショートカットキーを押しても何の反応もありません。 メニューバーのツール-マクロ-マクロのダイアログボックスを表示させてから、 「改ページ範囲」のマクロを選ぶと改ページされます。 そこで質問なのですが、 なぜ、ショートカットキーが使えないのでしょうか? よろしくお願いします。

  • エクセルのマクロの記述について

    VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・ -------------------------------------------------------------------- Sub hideworksheets() Worksheets("sheet1").Visible = False End Sub Sub ボタン_Click() ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub ------------------------------------------------------------ 1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。 2.「Sub hideworksheets()  Worksheets("sheet1").Visible = False    End Sub」    の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

  • Excel VBAでツールバーにマクロを登録したい

    自作のツールバーをブックに添付し、 スタートアップにマクロを書いたブックを保存し(起動して非表示にしてあります)、 そのマクロをツールバーの各ボタンに登録しようとしています。 下記のようなコードを書いたのですが、ツールバーに作成したボタンにはマクロが登録できるのですが、 サブメニュー内のボタンには登録できません。 Dim MyWB, NBar MyWB = "stampB.xls" NBar = "stampB1.0" For i = 1 To Application.CommandBars(NBar).Controls.Count  'ボタンのキャプションと同じ名前のマクロを登録  With Application.CommandBars(NBar).Controls.Item(i)   .OnAction = MyWB & "!" & .Caption  End With Next i これをどのように改良したら、サブメニュー内のボタンにもマクロを登録できるようになりますでしょうか? ご存知の方どうぞよろしくお願いします。

  • エクセルVBAの不思議な挙動?

    エクセル2003です。 ThisWorkbookには以下の記述があります。 Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> "Sheet1" Then Exit Sub If Range("A1").Value = "" Then MsgBox "A1が未入力です" Range("A1").Select Cancel = True End If Application.OnTime Now(), "ページ移動" End Sub 標準モジュールには以下の記述があります。 Sub ページ移動() Sheets("Sheet2").Select Range("A1").Select End Sub Sub プリント() ActiveWindow.SelectedSheets.PrintPreview End Sub これでSheet1を開いた状態でツールバーから印刷プレビュー指示をすると、A1セルが入力済みであればプレビュー画面を出し、プレビューを閉じればSheet2が表示されます。 ところが、同じ状態でツールバーからではなく、マクロ Sub プリント を実行すると、プレビュー画面にはなりますが、プレビューを閉じてもSheet1のままです。 なぜ、 Application.OnTime Now(), "ページ移動" が、有効にならないのでしょうか?

  • マクロで印刷ができません

    簡単な表を作成し、デザインモードでフォームコントロールでボタンを作成し、マクロの作成をしました。 印刷するためにボタンをクリックしても 印刷プレビューで画面が止まってしまいます。 ところがプレビュー画面を閉じると印刷が始まります。 何度やりかえてもマクロで最後まで印刷ができません。 記述は次のようになっています。 プリントも記述されているようなのですが・・・・ エクセル2007を使っています。 どなたか助けてください Sub ボタン3_Click() ' ' ボタン3_Click Macro ' ' ActiveSheet.Shapes("Button 3").Select Selection.Characters.Text = "ボタン 3" Range("B3:E12").Select ActiveSheet.PageSetup.PrintArea = "$B$3:$E$12" ActiveWindow.SelectedSheets.PrintPreview ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub

  • Excelマクロを動かす自作ツールバーについて。

    こんばんは。Excelで自作マクロをたくさんつくり、ユーザー設定で作った自作のツールバーのボタンにそれらのマクロを登録しました。自分のパソコン上では問題なく動いています。 このエクセルブックを会社にもっていって動かそうとツールバーもブックに添付したんですが、会社でツールバーとマクロはうまく連携してくれますか?つまり、その自作ツールバーのボタンを押したとき、会社のパソコンでもマクロはうごいてくれるのでしょうか? ある本によると、パソコンが変わるとツールバーのマクロを参照するフォルダが違ってしまうため、うまく動作しないというような感じのことが書いてあるんですが。。私の知識が浅いため、単なる読み間違いかもしれません。 わかる方、ご返事よろしくお願いします。

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

  • エクセル マクロで教えてください

    下記のマクロがうまく働きません SUB印刷01は単独ではいくのですが、繰返しをするとプレビューの行で止まります。SHEETオブジェクトがおかしいというのですが私には分かりません宜しくお願いします Sub 印刷01() With ActiveSheet.PageSetup .PrintQuality = 600 .CenterHorizontally = True .CenterVertically = False .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 47 .PrintErrors = xlPrintErrorsDisplayed End With ActiveWindow.SelectedSheets.PrintPreview ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True End Sub Sub 印刷繰返し() Dim WS As Object For Each WS In Sheets WS.Activate Call 印刷01 Next End Sub

  • エクセルVBAマクロのオプションボタンについて

    オプションボタンのマクロに関して教えて下さい。 マクロのスキルレベルは、新しいマクロの記録を多用して、マクロを組むレベルです。 「表示-ツールバー-フォーム」から選ぶオプションボタンを使って、オプションボタンAが押されている場合とBが押されている場合で、処理を変えたいのですが、そのオプションボタンの値をどうやっても拾えません。 色々検索した結果、以下のマクロでできる気がしたのですが、駄目でした。 Private Sub OptionButton1_Click() オプション1 = True End Sub Private Sub OptionButton2_Click() オプション2 = True End Sub Sub オプションボタン() If オプション1 = True Then Range("a1") = 1 ElseIf オプション2 = True Then Range("a1") = 2 Else Range("a1") = 0 End If End Sub 作ったオプションボタンを右クリックしてマクロ登録を選ぶと、「オプション1_Click」となっているので、「OptionButton1_Click」を「オプション1_Click」に変えてみたのですが、やっぱり駄目でした。 ネットではユーザフォームを使ったマクロ例はあるのですが、そのまま使用するオプションボタンの例がありません。できればユーザフォームは使いたくありません。 ご存知の方がいらっしゃいましたら、教えて下さい。よろしくお願いします。

専門家に質問してみよう