 
           
    キャレット位置(文字の挿入位置)にポップアップメニューを表示するマクロです。Word 2003以降で動作確認しました。
                    Option Explicit
                    
                    Private Type POINTAPI
                      x As Long
                      y As Long
                    End Type
                    
                    Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
                    Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
                    Private Declare Function GetFocus Lib "user32" () As Long
                    Private Declare Function GetCaretPos Lib "user32" (lpPoint As POINTAPI) As Long
                    
                    Private Const CommandBarName As String = "MyPopupMenu"
                    
                    Public Sub ShowPopupCaretPos()
                    'キャレット位置にポップアップメニュー表示
                      Dim hWwG As Long
                      Dim ClassName As String
                      Dim ClassBuf As String * 255
                      Dim p As POINTAPI
                      
                      hWwG = GetFocus()
                      GetClassName hWwG, ClassBuf, Len(ClassBuf)
                      ClassName = Left$(ClassBuf, InStr(ClassBuf, vbNullChar) - 1&)
                      If ClassName <> "_WwG" Then GoTo Err
                      GetCaretPos p
                      ClientToScreen hWwG, p
                      Application.CommandBars(CommandBarName).ShowPopup p.x, p.y
                      Exit Sub
                    Err:
                      MsgBox "処理が失敗しました。", vbCritical + vbSystemModal
                    End Sub
                    
                    Private Sub AddPopupMenu()
                    'ポップアップメニュー追加
                      Application.CustomizationContext = ThisDocument '保存先をThisDocumentに指定
                      On Error Resume Next
                      Application.CommandBars(CommandBarName).Delete
                      On Error GoTo 0
                      With Application.CommandBars.Add(Name:=CommandBarName, Position:=msoBarPopup)
                        With .Controls.Add(Type:=msoControlButton)
                          .Caption = "開く(&O)..."
                          .OnAction = "ExecuteCommandBarID"
                          .Parameter = 23
                          .FaceId = 23
                        End With
                        With .Controls.Add(Type:=msoControlButton)
                          .Caption = "閉じる(&C)"
                          .OnAction = "ExecuteCommandBarID"
                          .Parameter = 106
                          .FaceId = 106
                        End With
                        With .Controls.Add(Type:=msoControlButton)
                          .Caption = "名前を付けて保存(&A)..."
                          .OnAction = "ExecuteCommandBarID"
                          .Parameter = 748
                          .FaceId = 748
                        End With
                        With .Controls.Add(Type:=msoControlButton)
                          .BeginGroup = True
                          .Caption = "形式を選択して貼り付け(&S)..."
                          .OnAction = "ExecuteCommandBarID"
                          .Parameter = 755
                          .FaceId = 755
                        End With
                        With .Controls.Add(Type:=msoControlButton)
                          .Caption = "テンプレートとアドイン(&I)..."
                          .OnAction = "ExecuteCommandBarID"
                          .Parameter = 751
                          .FaceId = 751
                        End With
                        With .Controls.Add(Type:=msoControlButton)
                          .Caption = "Visual Basic Editor(&V)"
                          .OnAction = "ExecuteCommandBarID"
                          .Parameter = 1695
                          .FaceId = 1695
                        End With
                        With .Controls.Add(Type:=msoControlPopup)
                          .BeginGroup = True
                          .Caption = "マクロメニュー(&M)"
                          With .Controls.Add(Type:=msoControlButton)
                            .Caption = "マクロ1"
                            .OnAction = "button_OnAction"
                            .Parameter = "Hello."
                            .FaceId = 190
                          End With
                          With .Controls.Add(Type:=msoControlButton)
                            .Caption = "マクロ2"
                            .OnAction = "button_OnAction"
                            .FaceId = 190
                          End With
                        End With
                        With .Controls.Add(Type:=msoControlPopup)
                          .BeginGroup = True
                          .Caption = "印刷メニュー(&P)"
                          
                          Dim itm As Object
                          
                          For Each itm In CreateObject("Shell.Application").Namespace(4).Items
                            With .Controls.Add(Type:=msoControlButton)
                              .Caption = itm.Name
                              .OnAction = "btnPrint_OnAction"
                              .Parameter = itm.Name
                              .FaceId = 4
                            End With
                          Next
                        End With
                        With .Controls.Add(Type:=msoControlEdit)
                          .BeginGroup = True
                          .Caption = "文字入力"
                          .OnAction = "edit_OnAction"
                        End With
                        With .Controls.Add(Type:=msoControlComboBox)
                          .Caption = "サブメニュー"
                          .OnAction = "comboBox_OnAction"
                          .AddItem "ComboItem1"
                          .AddItem "ComboItem2"
                          .AddItem "ComboItem3"
                        End With
                        With .Controls.Add(Type:=msoControlDropdown, Temporary:=True)
                          .Caption = "ドロップダウン"
                          .OnAction = "dropdown_OnAction"
                          .AddItem "DropItem1"
                          .AddItem "DropItem2"
                          .AddItem "DropItem3"
                        End With
                      End With
                    End Sub
                    
                    Private Sub ExecuteCommandBarID()
                      Application.CommandBars.FindControl(ID:=Application.CommandBars.ActionControl.Parameter).Execute
                    End Sub
                    
                    Private Sub button_OnAction()
                      Select Case Application.CommandBars.ActionControl.Caption
                        Case "マクロ1"
                          Macro1 Application.CommandBars.ActionControl.Parameter
                        Case "マクロ2"
                          Macro2
                      End Select
                    End Sub
                    
                    Private Sub Macro1(ByVal msg As String)
                      MsgBox msg
                    End Sub
                    
                    Private Sub Macro2()
                      MsgBox Date
                    End Sub
                    
                    Public Sub edit_OnAction()
                    'エディットボックスに入力した文字列を選択位置に挿入して太字に変更
                      With Selection
                        .Collapse wdCollapseEnd
                        .InsertAfter Application.CommandBars.ActionControl.Text
                        .Font.Bold = True
                      End With
                    End Sub
                    
                    Public Sub comboBox_OnAction()
                      Selection.InsertAfter Application.CommandBars.ActionControl.Text
                    End Sub
                    
                    Private Sub dropdown_OnAction()
                      Selection.InsertBefore Application.CommandBars.ActionControl.Text
                    End Sub
                    
                    Private Sub btnPrint_OnAction()
                      Dim tmp As String
                      
                      tmp = Application.ActivePrinter
                      Application.ActivePrinter = Application.CommandBars.ActionControl.Parameter
                      Application.Dialogs(wdDialogFilePrint).Show
                      Application.ActivePrinter = tmp
                    End Sub
                
            
                メニューを表示するプロシージャは「ShowPopupCaretPos」で、「AddPopupMenu」でポップアップ表示するためのメニューを追加しています(それ以外のプロシージャはメニューから実行するプロシージャ)。
                
                「AddPopupMenu」のコードを見てもらえれば分かるように、メニューではボタン(msoControlButton)やエディットボックス(msoControlEdit)等のコントロールを利用でき、さらにメニューを階層表示することも可能です(msoControlPopup)。
                
                メニューからは自作のマクロはもちろん、ExecuteメソッドやExecuteMsoメソッドを使うことでWordに元々備わっている組み込みコマンドも実行することができ、コマンドにショートカットキーを設定することもできます(Captionプロパティに「&*」)。
            
                Sponsored Links
                
                
            
                上記マクロはツールバーやリボンから実行するのではなく、「ShowPopupCaretPos」プロシージャにショートカットキーを割り当てて使用することをお薦めします(割り当て方法はコチラやコチラのページを参照)。
                ショートカットキーを割り当てることで、マウスを使用することなく任意のコマンドを実行でき、作業効率を上げることが可能になります。
                