プロが教えるわが家の防犯対策術!

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

Office2003のExcelでマクロを利用しているのですが、
場当たり的にマクロをショートカットキーに対応させてきたために、
自分でも管理できず、収拾がつかなくなってしまいました。

一つ一つマクロのオプションを見ることが確実なのでしょうが、
手間がかかってしまいます。
自分で登録したマクロのショートカットキーを一覧で取得する方法はないでしょうか?

A 回答 (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
    • good
    • 2
この回答へのお礼

返信が遅くなってしまい、すみません。

教えていただいた方法で一覧を取得することができました。
作業時間の短縮になり、助かりました。

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

お礼日時:2010/02/06 12:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!