• ベストアンサー

Excelのマクロのショートカットキーを一覧で取得する方法

Excelのマクロのショートカットキーを一覧で取得する方法 Office2003のExcelでマクロを利用しているのですが、 場当たり的にマクロをショートカットキーに対応させてきたために、 自分でも管理できず、収拾がつかなくなってしまいました。 一つ一つマクロのオプションを見ることが確実なのでしょうが、 手間がかかってしまいます。 自分で登録したマクロのショートカットキーを一覧で取得する方法はないでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 昔、作ったマクロで、古典的なコードです。現在は、あまり推奨されるようなコードの内容ではありませんが、良かったら試してみてください。 ツール-マクロ-セキュリティを  Visual Basic プロジェクトへのアクセスを信頼する にチェックしていただいてから、以下のマクロを実行してください。 Debug.Print に出す場合は、該当部分のブロックを外してください。 今後、ショートカットを設ける場合は、Application.OnKey で設定して管理したほうが楽だと思います。 '------------------------------------------- Sub GetShortCutKeys() '現在の設定は、自ブックに限る Dim DefPath As String Dim FNo As Integer Dim LineBuf As String Dim i As Integer Dim buf() As String Dim bufName As String Dim bufKeyName As String Dim vbc As Object Const AT1 As String = "Attribute " Const AT2 As String = "VB_Invoke_Func =" Const TMPF As String = "Temp1.bas" DefPath = ThisWorkbook.Path & "\"  With ThisWorkbook.VBProject  For Each vbc In .VBComponents  .VBComponents(vbc.Name).Export Filename:=DefPath & TMPF  FNo = FreeFile()  Open DefPath & TMPF For Input As #FNo  While Not EOF(FNo)   Line Input #FNo, LineBuf   If InStr(1, LineBuf, "Sub", vbTextCompare) = 1 Then    bufName = Mid$(LineBuf, InStr(LineBuf, "Sub") + 4)   End If   If InStr(LineBuf, AT1) = 1 And InStr(LineBuf, AT2) > 0 Then    ReDim Preserve buf(i)    bufKeyName = " : Ctrl + " & Mid$(LineBuf, InStrRev(LineBuf, "=") + 3, 1)    buf(i) = bufName & bufKeyName '配列出力        'Debug.Printへ"    'Debug.Print bufName; bufKeyName       i = i + 1    bufName = ""   End If   LineBuf = ""  Wend  Close #FNo  Kill DefPath & TMPF  Next  End With  MsgBox Join(buf, vbCrLf) End Sub

Ajedony
質問者

お礼

返信が遅くなってしまい、すみません。 教えていただいた方法で一覧を取得することができました。 作業時間の短縮になり、助かりました。 ちなみに、「Visual Basic プロジェクトへのアクセスを信頼する」へのチェックを行わずに、教えていただいたマクロを実行したところ、「プログラミングによるVisual Basic プロジェクトへのアクセスは信頼性に欠けます」とのメッセージが出ました。 Wendy02さんがおっしゃられたように、セキュリティ的に気をつける必要があるようです。 今後は、教えていただいたApplication.OnKeyというものを調べて使いたいと思います。 ありがとうございました。

関連するQ&A