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

このQ&Aのポイント
  • PowerPointでマクロをショートカットキーに割り当てる方法について解説します。
  • エクセルでマクロをショートカットキーに割り当てる方法と同じVBAコードを使用しても、PowerPointではエラーが発生します。
  • PowerPointでマクロをショートカットキーに割り当てる場合、Application.OnKeyの使用方法に注意が必要です。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.2

アドインにして、新しくできたツールバーに ショートカットキーの指定もするのが簡単ですね。 newBarというツールバーが画面下にでき、 Alt+.でズームアップ Alt+,でズームダウン です。 Sub Auto_Open() My_Bar End Sub Sub My_Bar() Dim n As Integer Dim myBar As CommandBar Dim myButton As CommandBarButton On Error Resume Next Application.CommandBars("newBar").Delete On Error GoTo 0 Set myBar = Application.CommandBars.Add("newBar", msoBarBottom, , True) With myBar With .Controls.Add(msoControlButton) .Style = msoButtonCaption .Caption = "ズームUP(&.)" .OnAction = "Zoom_UP" End With With .Controls.Add(msoControlButton) .Style = msoButtonCaption .Caption = "ズームDown(&,)" .OnAction = "Zoom_Down" End With .Visible = True End With End Sub Sub Zoom_Up() With ActiveWindow.View If .Zoom < 390 Then .Zoom = .Zoom + 5 End If End With End Sub Sub Zoom_Down() With ActiveWindow.View If .Zoom > 10 Then .Zoom = .Zoom - 5 End If End With End Sub Sub Auto_Close() On Error Resume Next Application.CommandBars("newBar").Delete End Sub

t29x0479
質問者

お礼

ご回等ありがとうございます。さっそくやってみました。 うまく行きました。感動です。 追加で2点ご教授願えませんでしょうか。 ■質問(1) 画面下部に追加されるツールバーを非表示にして、ショートカットのみを有効にすることは可能でしょうか? もし無理なら、画面下部かどこか、自分で設定することは可能でしょうか。 ■質問(2) 表示倍率の件とは別件ですが、四角形とかオブジェクトを書くときはいつも1ミリ単位で書いてます。 大きさがうまくあわないときは、オブジェクトのプロパティを開いて、手動でサイズを入力して変更してます。 この手の作業をマクロ化したくて以下のようなマクロを作成しました。 オブジェクトを選択していない状態で実行するとエラーとなるのですが、オブジェクトを選択していないときは何もせず、オブジェクトを選択しているときにのみ実行するようにしたいです。 キーボード操作をマクロで記録して中身を見ただけなので、構文等が怪しいと思います。単位がミリではないのか、2.76というのが出てきました。 どうすればいいかご教授願えませんでしょうか。 最終的には上記同様、ショートカットキーに割り当てるつもりです。 === Sub Height_Up() With ActiveWindow.Selection.ShapeRange .Fill.Transparency = 0# .Height = .Height + 2.76 End With End Sub Sub Height_Down() With ActiveWindow.Selection.ShapeRange .Fill.Transparency = 0# .Height = .Height - 2.76 End With End Sub

その他の回答 (3)

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.4

追記.. PowerPointに関する質問は、 mougというサイトに書き込んでくださると 回答がしやすいんです。 ここでは、VBAコードのアップがしにくいので。 mougを検索してください。

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.3

■質問(1) ・ツールバーを非表示: API関数のGetKeyboardStateなどと使わないと無理。 ・位置を自分で設定: Set myBar = Application.CommandBars.Add("newBar", msoBarBottom, , True) の部分の 画面下部→msoBarBottom を 画面上部→msoBarTop 画面左部→msoBarLeft に変更。 ほかにも。Help参照。 ■質問(2)いろんな回答があります。 そのごく一部。 Sub Size_Up() With ActiveWindow.Selection If .Type = ppSelectionShapes Or .Type = ppSelectionText Then With .ShapeRange .LockAspectRatio = msoFalse .ScaleWidth 1.1, msoFalse .ScaleHeight 1.1, msoFalse End With End If End With End Sub Sub Size_Down() With ActiveWindow.Selection If .Type = ppSelectionShapes Or .Type = ppSelectionText Then With .ShapeRange .LockAspectRatio = msoFalse .ScaleWidth 0.9, msoFalse .ScaleHeight 0.9, msoFalse End With End If End With End Sub

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

PowerPointは使わないのでマクロのことも分かりません。 Web検索でこんなページがヒットしました。 PowerPointのマクロでのショートカットキー設定 http://d.hatena.ne.jp/satelliteh/20071219/1198074801

関連するQ&A

  • エクセル ルーチンマクロ

    以前コピー・貼り付けを停止させる為に、下記マクロを参照させて頂いたのですが、 '--------------------------------------------------------------- Sub DisableCommandButtons(Cmd_bln As Boolean) 'コピー・貼り付けを停止させるサブルーチン・マクロ  Dim cmd As Variant  Dim Cmdb As Object  Dim CmdNames As Variant  CmdNames = Array("Worksheet Menu Bar", "Cell", "Column", "Row")  'ショートカットのインスタンス  If Cmd_bln = False Then   Application.OnKey "^c", ""   Application.OnKey "^v", ""   Application.OnKey "^x", ""  Else   Application.OnKey "^c"   Application.OnKey "^v"   Application.OnKey "^x"  End If  'コマンドボタンのEnable  For Each cmd In CmdNames  If cmd = "Worksheet Menu Bar" Then   With Application.CommandBars(cmd).Controls(2)    .Controls(3).Enabled = Cmd_bln    .Controls(4).Enabled = Cmd_bln    .Controls(5).Enabled = Cmd_bln   End With  Else   With Application.CommandBars(cmd)    .FindControl(, 19).Enabled = Cmd_bln 'Copy    .FindControl(, 22).Enabled = Cmd_bln 'Paste    .FindControl(, 21).Enabled = Cmd_bln 'Cut   End With  End If  Next cmd End Sub '--------------------------------------------------------------- このマクロを実行した所、コンテキストメニュー及びショートカットキーのコピー、貼付が無効になりました。 EnableCommandButtons というマクロを別に作り ショートカットのインスタンスの  If Cmd_bln = False Then を  If Cmd_bln = True Then に 書き換えて、実行した所、ショートカットキーは有効になったのですが コンテキストメニューのコピー、貼付を有効にするやり方がわかりません。 以前、 同じ質問させていただき、ご回答頂いたのですが、別のPCでは、その方法でもダメなことが分かりました。 OSはXP Pro エクセルはは2003です どなたか、助けていただけないでしょうか? よろしくお願い致します。

  • エクセル ルーチンマクロ

    エクセルにて、コピー貼付を禁止するマクロを、教えてGooの過去のQ&Aから、参照させていただきました。 '--------------------------------------------------------------- Sub DisableCommandButtons(Cmd_bln As Boolean) 'コピー・貼り付けを停止させるサブルーチン・マクロ  Dim cmd As Variant  Dim Cmdb As Object  Dim CmdNames As Variant  CmdNames = Array("Worksheet Menu Bar", "Cell", "Column", "Row")  'ショートカットのインスタンス  If Cmd_bln = False Then   Application.OnKey "^c", ""   Application.OnKey "^v", ""   Application.OnKey "^x", ""  Else   Application.OnKey "^c"   Application.OnKey "^v"   Application.OnKey "^x"  End If  'コマンドボタンのEnable  For Each cmd In CmdNames  If cmd = "Worksheet Menu Bar" Then   With Application.CommandBars(cmd).Controls(2)    .Controls(3).Enabled = Cmd_bln    .Controls(4).Enabled = Cmd_bln    .Controls(5).Enabled = Cmd_bln   End With  Else   With Application.CommandBars(cmd)    .FindControl(, 19).Enabled = Cmd_bln 'Copy    .FindControl(, 22).Enabled = Cmd_bln 'Paste    .FindControl(, 21).Enabled = Cmd_bln 'Cut   End With  End If  Next cmd End Sub '--------------------------------------------------------------- このマクロを実行した所、コンテキストメニュー及びショートカットキーのコピー、貼付が無効になりました。 しかし、マクロを有効にしたエクセルファイルを閉じても、他のエクセルファイルもコピー、貼付が無効になってしまいました。 コピー、貼付を有効にするためのマクロを動かさないとダメなのか?と思い、色々試してみたのですが、うまくいきません。 EnableCommandButtons というマクロを別に作り ショートカットのインスタンスの  If Cmd_bln = False Then を  If Cmd_bln = True Then に 書き換えて、実行した所、ショートカットキーは有効になったのですが コンテキストメニューのコピー、貼付を有効にするやり方がわかりません。 どなたか、助けていただけないでしょうか? よろしくお願い致します。

  • excel2002vbaで選択しているセルがハイパーリンクとそれ以外のものを区別する方法

    ハイパーリンクをenterキーでリンク先に飛べるようにマクロを挿入したのですが、ハイパーリンク以外のセルでenterキーを押下した時に、「インデックスが有効範囲にありません」というエラーメッセジが表示されていまい通常のセル移動が行えません。 使用しているマクロは以前に掲載されていた以下のマクロをしようしています。 何かいい方法はあるでしょうか? Sub Auto_Open() '起動時 キー設定 On Call SettingKeys(True) End Sub Sub Auto_Close() '終了時 キー設定 Off Call SettingKeys(False) End Sub Sub SettingKeys(flg As Boolean) If flg Then Application.OnKey "{Enter}", "JumpHyperLink" Application.OnKey "~", "JumpHyperLink" Else Application.OnKey "{Enter}" Application.OnKey "~" End If End Sub Sub JumpHyperLink() If TypeName(Selection) = "Range" Then Selection.Hyperlinks(1).Follow NewWindow:=False End If End Sub

  • Office2007でコマンドバーの作り方

    最近Officeを2003から2007に変更しました。 2003では、『頻繁におこなう作業』を『VBAでコマンドバー上のボタン』化して、効率化していました。 例) Dim MyBar As CommandBar Dim MyButton1 As CommandBarControl Set MyBar = Application.CommandBars.Add(Name:=cnstCommandBarName, Position:=msoBarLeft) MyBar.Visible = True Set MyButton1 = MyBar.Controls.Add(Type:=msoControlButton, Id:=1) ところが、2007では、コマンドバーはできず、アドインリボンにボタンができてしまいます。 コマンドバー化は2007ではできないでしょうか? Web検索でも調べていますが、Office コマンドバーなどの検索ワードだと関係ないものを拾ってしまい、なかなか調べられません。 助言お願いします。

  • 素数を求めるマクロを

    走らすと暴走したようになり、素数=151で止まります。 どこが悪いのでしょうか。正常に終わるようにしたいです。 ====================== Sub 素数を求める()   Dim i As Long   Dim j As Long   Dim m As Long   Dim p As Long   Dim flg As Boolean   i = 1   j = 1   p = 2   Do     flg = False     For m = 2 To Int(Sqr(p))       If p Mod m = 0 Then         flg = True         Exit For       End If     Next     If flg = False Then       Cells(i, j) = p       i = i + 1       If i > Rows.Count Then         i = 1         j = j + 1       End If     End If     p = p + 1   Loop End Sub ======================

  • マクロで分岐をさせる方法

    下記の記録マクロでWith→End With 間にIFで分岐を試みたのですが エラーになります。どうすれば出来るのか伝授をお願いします。 マクロは初心者です。 Dim hensuh(2) As Integer Dim dekiru As Long Dim kinek As Long Dim uineu As Long Dim myTime As Date Dim flg As Boolean Sub OnTimeSamp1() Application.OnTime EarliestTime:=TimeValue("09:00:00"), Procedure:="Ontime_Set" '記録開始 Application.OnTime EarliestTime:=TimeValue("11:00:00"), Procedure:="Ontime_Reset" '記録終了 End Sub Sub Ontime_Set() 'トグルになっている If flg = False Then flg = True myTime = Now + TimeSerial(0, 0, 1) ElseIf flg = True Then flg = False Else Exit Sub End If If Range("A1").Value = "" Then Range("A1").Value = Format(Now, "hh:mm:ss") '時間記録(スタート) End If Application.OnTime EarliestTime:=myTime, _ Procedure:="my_Procedure", Schedule:=flg If flg = False Then myTime = 0 End If End Sub Sub my_Procedure() Worksheets("kirokuyou").Activate 'ワークシートをアクティブにする。(記録中別のワークシートを開けた場合そこに記録されてしまうのを防ぐ) With Range("A65536").End(xlUp).Offset(1) .Value = Format(Now, "yyyy:mm:dd:hh:mm:ss") '時間記録 .Offset(, 1).Value = Range("S3").Value 'S3 の値 .Offset(, 2).Value = Range("T3").Value 'T3 の値 .Offset(, 3).Value = Range("U3").Value 'U3 の値 .Offset(, 4).Value = Range("V3").Value 'V3 の値 dekiru = Range("V3").Value Range("V6").Value = dekiru kinek = Range("T22").Value Range("T18").Value = kinek uineu = Range("U22").Value Range("U18").Value = uineu 'IF S17 >= 120 Then 'hensuh(0) = Range("S17").Value ←変数に代入後、分岐させたいのですがエラーになる 'Elseif S17 >= 110 Then 'hensuh(1) = Range("S17").Value ←変数に代入後、分岐させたいのですがエラーになる 'Elseif S17 >= 100 Then 'hensuh(2) = Range("S17").Value ←変数に代入後、分岐させたいのですがエラーになる 'End If flg = False myTime = 0 End With Call Ontime_Set End Sub Sub Ontime_Reset() 'タイマーリセット On Error Resume Next Application.OnTime EarliestTime:=myTime, _ Procedure:="my_Procedure", Schedule:=False If Err.Number > 0 Then MsgBox "OnTime設定はされていません。", 64 Err.Clear flg = False Else MsgBox myTime & "の設定は解除されました。", 64 flg = False myTime = Empty End If End Sub

  • マクロがエラーになります

    下記のようなマクロ使いたいのですがエラーになり   動作しません 実行時エラー'1004': アプリケーション定義またはオブジェクト定義エラー のエラーになりますどのように直せばよいのでしょうか? よろしくお願いします。 Sub test() Dim ReturnMessage As VbMsgBoxResult ReturnMessage = MsgBox("VBEを閉じますか?", vbYesNo, "確認") If ReturnMessage = vbYes Then Application.VBE.MainWindow.Visible = False End If End Sub

  • マクロ 記述が悪くエラーがかかります。

    いつも回答ありがとうございます。 最後らへんの記述で実行時エラー【型が一致しません】がかかります。 Worksheets("集計用").Range(b1, b2).Copy _ Destination:=Worksheets(b3).Range("B2") ← ここでエラーがかかる。 ワークシート名に変数を使用しているせいだと思います。 解決する方法を御指導して頂けないでしょうか?宜しくお願い致します。 Sub グラフの作成() Dim Date1 As Date Dim Date2 As Date Dim SName As String Dim b1 As Variant Dim b2 As Variant Dim b3 As Variant Dim d1 As Variant Dim d2 As Variant Dim d3 As Variant With Worksheets("集計用") s1: Date1 = Application.InputBox("最初の日付を2012/12/1のように入力してください。") If Date1 = 0 Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b1 = .Columns("B").Find(Date1, , xlValues, 1) If b1 Is Nothing Then If MsgBox("入力した日付が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s1 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d1 = b1.Row s2: Date2 = Application.InputBox("最初の日付を2012/12/31のように入力してください。") If Date1 = 0 Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b2 = .Columns("B").Find(Date2, , xlValues, 1) If b2 Is Nothing Then If MsgBox("入力した日付が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s2 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d2 = b2.Row s3: SName = Application.InputBox("商品名を入力して下さい。") If SName = "False" Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b3 = .Rows("3").Find(SName, , xlValues, 1) If b3 Is Nothing Then If MsgBox("入力した商品名が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s3 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d3 = b3.Column End With Worksheets.Add After:=Worksheets("集計用") ActiveSheet.Name = b3 Worksheets("集計用").Range(b1, b2).Copy _ Destination:=Worksheets(b3).Range("B2") Worksheets("集計用").Range(Cells(d1, d3), Cells(d2, d3)).Copy _ Destination:=Worksheets(b3).Range("C2") End Sub

  • 2つのマクロの組合せがうまくいきません

    Excel2002を使用しています。 ・シートに変更があった場合、可否を問うメッセージを出す。 ・但し、「A1」及び「D、E列」の変更は除外する。 ・「D、E列」をダブルクリックしたら、アクティブセルに「済」の文字が入る。 という事をしたくて、Sheet1に以下のようなコードを書きましたが、うまくいきません。 「A1」の変更は除外されるのですが、DE列への変更はメッセージが出てしまいます。 又、そのメッセージが出た際「いいえ」を選択するとエラーになります(Application.Undo)。 Private Sub Worksheet_Change(ByVal Target As Range) Dim 変更回答 As Integer If Target.Address = "$A$1" Then Exit Sub If Target.Columns = ("4:5") Then Exit Sub 変更回答 = MsgBox("セル:" & Target.Address(False, False) & "が変更されました。" & vbCrLf & _ "   「はい」 … 変更許可" & vbCrLf & "   「いいえ」… 内容破棄", vbYesNo) Application.EnableEvents = False If 変更回答 = vbYes Then Application.EnableEvents = True Exit Sub Else Application.Undo End If Application.EnableEvents = True End Sub    ****** Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 4 Then ActiveCell = "済" Cancel = True End If If Target.Column = 5 Then ActiveCell = "済" Cancel = True End If End Sub 以上、ご教授、宜しくお願い致します。

  • エクセル マクロ 初心者です

    エクセルマクロ初心者です。 以下の2つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。

専門家に質問してみよう