目安箱 IV

目安箱投稿のルールはこちらをごらんください。
ご意見は電子メールで承っています。
「目安箱」は質問禁止です。技術的な質問はそれぞれの質問箱へどうぞ。

迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
42 / 107 ツリー ←次へ | 前へ→

【42】Excel 97 以降で、メニューを簡単に追加/削除したい 谷 誠之 04/4/9(金) 21:43 Excel[未読]
【43】Excel 97 以降で、メニューを簡単に追加するた... 谷 誠之 04/4/9(金) 21:50 Excel[未読]
【44】Excel 97 以降で、メニュー項目を簡単に追加す... 谷 誠之 04/4/9(金) 21:54 Excel[未読]
【45】Excel 97 以降で、メニューを簡単に追加する例 谷 誠之 04/4/9(金) 21:59 Excel[未読]
【91】Re:Excel 97 以降で、メニューを簡単に追加す... Jaka 05/3/10(木) 13:53 Excel[未読]
【200】上のコードに不具合があります。 Jaka 07/7/13(金) 15:12 Excel[未読]
【202】誤字修正 Jaka 07/7/13(金) 15:20 Excel[未読]
【201】ボタンにパラメータを持たす、ボタン名(キャ... Jaka 07/7/13(金) 15:16 Excel[未読]

【42】Excel 97 以降で、メニューを簡単に追加/削...
Excel  谷 誠之 E-MAIL  - 04/4/9(金) 21:43 -

引用なし
パスワード
   Excel 97 以降では、メニューの操作に CommandBars コレクションを使います。
この CommandBars コレクション(正確にはそこから呼び出される CommadBar オブジェクト)には様々なコレクションやメソッドがあり、幅広いメニュー操作、またはコマンドボタン操作が可能です。

しかし高機能すぎて、「簡単にメニューを追加/削除する」のはちょっと難しいと感じました。

そこで、オリジナルのメニュー操作関数を作成しました。
みなさん、ご自由にお使いください。
自分では結構気に入っています。

【43】Excel 97 以降で、メニューを簡単に追加する...
Excel  谷 誠之 E-MAIL  - 04/4/9(金) 21:50 -

引用なし
パスワード
   新しいメニューを作るための関数です。
ここで「メニュー」とは、「ファイル(F)」「編集(E)」などの、第一階層のメニューのことをさします。

戻り値は、新しく作成したメニューオブジェクト(正確には CommandBarPopup オブジェクト)です。

Function F_MakeNewPopup(親 As Object, メニュー名 As String, グループ As Boolean) As CommandBarPopup

  Dim NewMenu As CommandBarPopup
  Set NewMenu = 親.Controls.Add(msoControlPopup)
  With NewMenu
    .Caption = メニュー名
    .BeginGroup = グループ
  End With
  
  Set F_MakeNewPopup = NewMenu

End Function

【44】Excel 97 以降で、メニュー項目を簡単に追加...
Excel  谷 誠之 E-MAIL  - 04/4/9(金) 21:54 -

引用なし
パスワード
   既存のメニューに新しいメニュー項目を追加するサブルーチンです。
ここでメニュー項目とは、例えば「ファイル(F)」メニューの中の「新規作成(N)...」や「開く(O)...」などの、それを実行したら何らかのアクションを起こす(つまり、マクロを登録する)メニューのことです。

私は変数名によく日本語を使います。これは賛否両論あると思いますが、私は「既存のメソッドやプロパティと区別できる」「コメントの代わりになる」という理由で使っています。

Sub MakeNewMenu(親 As Object, メニュー名 As String, マクロ名 As String, グループ As Boolean)

  Dim SubMenu As CommandBarButton
  Set SubMenu = 親.Controls.Add(msoControlButton)
  With SubMenu
    .Caption = メニュー名
    .OnAction = マクロ名
    .BeginGroup = グループ
    .Style = msoButtonCaption
  End With

End Sub

【45】Excel 97 以降で、メニューを簡単に追加する...
Excel  谷 誠之 E-MAIL  - 04/4/9(金) 21:59 -

引用なし
パスワード
   上で紹介したふたつの関数/サブルーチンを使って、実際にメニューを登録する例です。

  If F_ExistMenu("畦道(&A)") = False Then
    Set NewMenu = F_MakeNewPopup(CommandBars("Worksheet Menu Bar"), "畦道(&A)", False)
    
    Call MakeNewMenu(NewMenu, "設問設定作成編集(&M)...", "設問設定作成編集", False)
    Call MakeNewMenu(NewMenu, "設問一覧作成(&L)", "設問一覧作成", False)
    Set SubMenu = F_MakeNewPopup(NewMenu, "単純集計(&G)", True)
      Call MakeNewMenu(SubMenu, "専用シート作成(&P)", "単純集計準備", False)
      Call MakeNewMenu(SubMenu, "単純集計実行(&R)", "単純集計実行", False)

  End If

これは私が昔作った「畦道」というツールのメニュー例です。
これを実行することにより、

 畦道(A)
  +設問設定作成編集(M)...
  +設問一覧作成(L)
  +単純集計(G)
   +専用シート作成(P)
   +単純集計実行(R)

こんなメニューが作成されます。

【91】Re:Excel 97 以降で、メニューを簡単に追加...
Excel  Jaka  - 05/3/10(木) 13:53 -

引用なし
パスワード
   メニューバーで検索してみたら、意外とメニューバーのマクロってないというか、残ってなかったので、谷さんと違う書き方です。
(普段は谷さんと同じようにsetした書き方をしてますけど....。)

Sub dnmm()
With Application.CommandBars("Worksheet Menu Bar").Controls
  With .Add(Type:=msoControlPopup, Temporary:=True)
    .Caption = "新メニュー"
    With .Controls
      With .Add(Type:=msoControlButton)
        .Caption = "マクロ1"
        .OnAction = "Mcro1"
      End With
      With .Add 'type略
        .Caption = "マクロ2"
        .OnAction = "Mcro2"
      End With
      With .Add(Type:=msoControlPopup)
        .BeginGroup = True
        .Caption = "マクロ3"
        With .Controls.Add
          .Caption = "マクロ3-1"
          .OnAction = "Mcro3"
        End With
      End With
      With .Add(Type:=msoControlPopup)
        .Caption = "マクロ4"
        With .Controls
           With .Add
             .Caption = "マクロ4-1"
             .OnAction = "Mcro4-1"
           End With
           With .Add
             .Caption = "マクロ4-2"
             .OnAction = "Mcro4-2"
           End With
        End With
      End With
    End With
  End With
End With
End Sub

【200】上のコードに不具合があります。
Excel  Jaka  - 07/7/13(金) 15:12 -

引用なし
パスワード
   ↑の不具合
プロシジャー名に「-」は使えません。

>           With .Add
>             .Caption = "マクロ4-1"
>             .OnAction = "Mcro4-1"
                    ↑ Mcro4_1 似変えてください。
>           End With
>           With .Add
>             .Caption = "マクロ4-2"
>             .OnAction = "Mcro4-2"
                    ↑ Mcro4_2 似変えてください。
>           End With

【201】ボタンにパラメータを持たす、ボタン名(キ...
Excel  Jaka  - 07/7/13(金) 15:16 -

引用なし
パスワード
   メニューバーにボタンがこんな感じとして。

新メニュー
 │
 ├ マクロ1
 │
 ├ マクロ2
 │
 ├ マクロ3▼ ─ マクロ3-1
 │
 └ マクロ4▼ ─ パラマクロ4-1 キャプション名取得は、この階層まで。
        │
         └ パラマクロ4-2
            │ 
            │ ↓ 注)キャプション名取得は、この階層以下は対応させてません。
             └ マクロ5▼ ─ パラマクロ5-1


Sub パラメータの場合()
With Application.CommandBars("Worksheet Menu Bar").Controls
  With .Add(Type:=msoControlPopup, Temporary:=True)
    .Caption = "新メニュー"
    With .Controls
      With .Add(Type:=msoControlButton)
        .Caption = "マクロ1"
        .OnAction = "Mcro1"
        .Parameter = "パラマクロ1"
      End With
      With .Add
        .Caption = "マクロ2"
        .OnAction = "Mcro1"
        .Parameter = "パラマクロ2"
      End With
      With .Add(Type:=msoControlPopup)
        .BeginGroup = True
        .Caption = "マクロ3"
        With .Controls.Add
          .Caption = "マクロ3-1"
          .OnAction = "Mcro1"
          .Parameter = "パラマクロ3-1"
        End With
      End With
      With .Add(Type:=msoControlPopup)
        .Caption = "マクロ4"
        With .Controls
           With .Add
             .Caption = "マクロ4-1"
             .OnAction = "Mcro1"
             .Parameter = "パラマクロ4-1"
           End With
           With .Add
             .Caption = "マクロ4-2"
             .OnAction = "Mcro1"
             .Parameter = "パラマクロ4-2"
           End With
        End With
      End With
    End With
  End With
End With
End Sub

Sub Mcro1()
With Application.CommandBars.ActionControl
  MsgBox "ボタンキャプション" & vbLf & .Caption & vbLf & vbLf & _
      "パラメータ" & vbLf & .Parameter
End With
End Sub

・余談
自分で使っているメニューバーは、独自のアイコンを持たせたいためマクロでボタン等は作ってません。
マクロでオリジナルアイコンを反映させるには、どこかのシートにアイコン用図形を貼り付けておいて、それをコピー、貼り付けを行うので、エクセルに貼り付けとして先にコピー、エクセル起動、貼り付けの手順を踏むとコピーされたアイコンが張り付くといった情けない結果になるから.....。

で、どうやっているのかといえば、ユーザー設定で作っておいて、起動時にメニューバーに移動させる方法を取ってます。
至極たまに、起動時にエラーが発生する時がありますが、エクセルの不具合でボタンを移動後、コピー元のツールバーを消せなかった時におきます。そういう時は、手動でそのツールバーを消してやれば良いです。

【202】誤字修正
Excel  Jaka  - 07/7/13(金) 15:20 -

引用なし
パスワード
   >>             .OnAction = "Mcro4-1"
                    ↑ Mcro4_1 に変えてください。
>>           End With
>>           With .Add
>>             .Caption = "マクロ4-2"
>>             .OnAction = "Mcro4-2"
                    ↑ Mcro4_2 に変えてください。
>>           End With

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
42 / 107 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:   
0
(SS)C-BOARD v3.8 is Free