2

Word 2007のVBAマクロを使用して、フォーカスのある右クリックのコンテキストメニューをプログラムで表示したいと思います。

これにより、マクロをホットキーにマップし、キーボードを離れることなくフォーカスのあるメニューを表示できます。これは、次の行に沿ってアクセスされるApplicationオブジェクトのコレクションを介して行われると想定しました。CommandBars

Application.CommandBars.'access appropriate mehod or member here'

しかし、コンテキストメニューを表示するように見えるメソッドやメンバーは表示されません。VBAマクロを介してこれを実現することは可能ですか?

編集:

提案されたように、私は各CommandBarをループし、名前とインデックスを取得して、使用するCommandBarインデックスを見つけようとしました。

Sub C_RightClick()
'Activates right-click context menu
'

Dim cbar As Office.CommandBar
Dim cbarIndex As Integer
Dim testString As String
Dim cBarsArray(0 To 500)
Dim arrayCounter As Integer

testString = ""
arrayCounter = 1

For Each cbar In CommandBars
    'TRUE if right-click
    'If LCase(cbar.Name) = 'right-click' Then
    '    cbarIndex = cbar.Index
    'End If

    testString = testString + CStr(cbar.Index) + " " + cbar.Name + " " + CStr(cbar.Type = msoBarTypePopup) + vbCrLf
    Debug.Print cbar.Name; " "; cbar.Type = msoBarTypePopup

    'Add name to array and increment counter
    cBarsArray(arrayCounter) = cbar.Name
    arrayCounter = arrayCounter + 1

Next cbar

MsgBox testString

'Application.CommandBars(cbarIndex).ShowPopup


End Sub

ただし、「右クリック」というタイトルは表示されません。インデックスが1の「標準」である可能性があると思いましたが、アクセスしようとするとエラーが発生しました。

タブが選択されたときにWord2007に表示されるデフォルトの右クリックコンテキストメニューの正しい名前を誰かが知っている場合Homeは、それをいただければ幸いです。それ以外の場合は、その質問をスーパーユーザーに渡して、自分で調査します。お手伝いありがとう。

4

1 に答える 1

1

次のようなものを試してください:

Application.CommandBars(100).ShowPopup

引数は、コマンドバーのインデックスまたはキャプションにすることができます。

コマンドバーで特定のコマンドを実行するには、次のようにしてみてください。

Application.CommandBars(100).Controls("Paste").Execute

すべてのコマンドバーのリストをイミディエイトウィンドウに印刷するには:

Sub test()
Dim cbar As Office.CommandBar
For Each cbar In CommandBars
    'TRUE if right-click
    Debug.Print cbar.Name; " "; cbar.Type = msoBarTypePopup
Next cbar
End Sub

編集: [ホーム]タブに表示される右クリックメニューに関する質問への回答として、これはCommandBarとは異なる種類のコントロールだと思います。

右クリックメニューの名前とインデックスをよりよく理解するために、上記のコードを少し変更しました。これで、各右クリックメニューにコントロールを追加しようとします。追加されたコントロールのキャプションは、メニューの名前とインデックスです。コントロールは一時的なもので、次にWordを開いたときに消えます。

Sub test()
Dim cbar As Office.CommandBar
Dim ctl As Office.CommandBarControl
For Each cbar In Application.CommandBars
    With cbar
        On Error Resume Next
        'this will delete any customizations
        .Reset
        Set ctl = .Controls.Add(Type:=msoControlButton, Temporary:=True)
        ctl.Caption = .Index & " - " & cbar.Name
        Debug.Print "Name: "; cbar.Name; " Right-click: "; cbar.Type = msoBarTypePopup; " Error descr: "; Err.Description
        On Error GoTo 0
    End With
Next cbar
End Sub

また、エラーメッセージがある場合は、そのメッセージをイミディエイトウィンドウに出力します。

「ホーム」コンテキストメニューがうまくいかないと思う理由は、コントロールが追加されていないためです。これは、コントロールが追加されたメニューの写真です。

ここに画像の説明を入力してください

于 2013-03-05T21:19:58.307 に答える