VBAを介してExcelワークシートにカスタマイズされたメニューを作成する方法

今すぐ共有:

Excelリボンは、特定のジョブに合わせて変更できます。 この演習では、タスクに関連する特定のシートをユーザーに示す新しいメニューを作成します。

この記事では、次のように、Excelワークシートでカスタマイズされたメニューを作成する方法を紹介します。Excelワークシートでカスタマイズされたメニューを作成する

この記事は、読者が開発者リボンを表示していて、VBAエディターに精通していることを前提としています。 そうでない場合は、Googleの「Excel開発者タブ」または「Excelコードウィンドウ」をご覧ください。

ワークブック

使用するワークブックには多数のシートがあります。 ここにあるサンプルを使用することをお勧めします。 こんな感じです。サンプルワークブック

最初のXNUMX枚のシートは機能不全であり、この演習ではナビゲーション目的でのみ使用されています。

XNUMX番目のシートには、このワークブックに固有のカスタマイズされたメニュー構造が含まれています。 現在、テストボタンを除いて空白になっているはずです。

メニュー構造を追加する

次のテキストブロックをシート「MenuSheet」のセルA1にコピーします。

レベル、キャプション、位置/マクロ、ディバイダー

1、&ユーザーツール、10

2、ダッシュボードを表示、SelectDashboard

2、新しい、、 TRUEを追加します

3、Client、SelectClient

3、Location、SelectLocation

3、Manager、SelectManager

2、Close、CloseFile

メニュー構造をフォーマットする

このCSVデータは最終的に列Aになります。個々のExcelセルにフォーマットするには、列Aを選択して使用します。 「テキストから列へ」 に選出しました。 [データ]タブ。 区切り文字は「コンマ」になります。個々のExcelセルにフォーマットする

上記では、適切なコードを追加すると、左側にレベルベースのメニュー構造が表示されます。レベルベースのメニュー構造

この演習の最初のレベルはアービットですrarブックの全幅が表示されるとわかるように、メニューバーのXNUMX番目の項目として配置されます。

メニューの作成と破棄

この特定のワークブックの新しいメニューのみが必要なので、ワークブックを開いたり閉じたりするときにそれらを作成および破棄します。

以下のコードは次のとおりですtart。 ブックを開いたり閉じたりするとトリガーされます。 ブックのモジュールにコピーします

MenuSheetのテストボタンをAuto_Openに割り当てます。

Option Explicit

Sub auto_Open()
    Call DeleteMenu
    Call CreateMenu
 End Sub
 
Sub auto_Close()
    Call DeleteMenu
End Sub

以下では、メニュー構造をさらに詳しく調べます。メニュー構造をより詳しく調べる

によってトリガーされるマクロはありません 新規追加 サブメニューの親として以外の機能がないためです。

この種のメニュー構造は保守が簡単です。 メニューレベルを意識して、マクロで新しいアイテムを追加するだけです。

コード

次のVBAコードをモジュールに追加します。 これにより、「MenuSheet」が調べられ、カスタマイズされたメニューが作成されます。

Sub CreateMenu()
'   Called from Auto_Open. 'NOTE: There is no error handling in this subroutine
    Dim MenuSheet As Worksheet
    Dim MenuObject As CommandBarPopup

    Dim MenuItem As Object
    Dim SubMenuItem As CommandBarButton
    Dim sRow As Integer
    Dim MenuLevel, NextLevel, PositionOrMacro, Caption, Divider

    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    Call DeleteMenu

    sRow = 2 '   start row
    
'   Add menus using the structure as per the MenuSheet
    Range("A" & sRow).Select
    Do While ActiveCell > "" '****************
        With MenuSheet
            MenuLevel = .Cells(sRow, 1)
            Caption = .Cells(sRow, 2)
            PositionOrMacro = .Cells(sRow, 3)
            Divider = .Cells(sRow, 4)
            NextLevel = .Cells(sRow + 1, 1)
        End With
        
        Select Case MenuLevel
            Case 1 ' Add the top-level menu to the Worksheet CommandBar
                Set MenuObject = Application.CommandBars(1). _
                    Controls.Add(Type:=msoControlPopup, _
                    Before:=PositionOrMacro, _
                    Temporary:=True)
                MenuObject.Caption = Caption
            Case 2 ' A Menu Item
                If NextLevel = 3 Then
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
                Else
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
                    MenuItem.OnAction = PositionOrMacro
                End If
                MenuItem.Caption = Caption
                If Divider Then MenuItem.BeginGroup = True
            Case 3 ' A SubMenu Item
                Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
                SubMenuItem.Caption = Caption
                SubMenuItem.OnAction = PositionOrMacro
                
                If Divider Then SubMenuItem.BeginGroup = True
        End Select
        sRow = sRow + 1
        Range("A" & sRow).Select '***************************************
    Loop
    Sheets("Dashboard").Activate
End Sub

Sub DeleteMenu()
'   This sub will be executed when the workbook is closing
    Dim MenuSheet As Worksheet
    Dim sRow As Integer
    Dim Caption As String
    
    On Error Resume Next
    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    sRow = 2
    Range("A" & sRow).Select
    Do While ActiveCell > ""
        If MenuSheet.Cells(sRow, 1) = 1 Then
            Caption = MenuSheet.Cells(sRow, 2)
            Application.CommandBars(1).Controls(Caption).Delete
        End If
        sRow = sRow + 1
        Range("A" & sRow).Select
    Loop
   
    On Error GoTo 0
End Sub

Sub SelectDashboard()
    Sheets("Dashboard").Activate
End Sub
Sub SelectClient()
    Sheets("Client").Activate
End Sub

Sub SelectLocation()
    Sheets("Location").Activate
End Sub

Sub SelectManager()
    Sheets("Manager").Activate
End Sub

Sub CloseFile()
    MsgBox "Close! (write your own code in the module)"
End Sub

[テスト]ボタンを使用してコードをテストします。 新しく作成されたユーザーメニューは、メニュー位置10の[アドイン]の下にあります。

Excelの回復

Excelは不安定な場合があり、開いているときにクラッシュして、ソースファイルに損傷を与えます。 ファイルの回復に失敗した場合は、修復するためのツールがあると便利です Excelのダメージ それ以外の場合、バックアップされていないすべての作業はlになりますost.

著者紹介:

フェリックスフッカーは、のデータ復旧の専門家です DataNumen、Inc。は、以下を含むデータ復旧技術の世界的リーダーです。 修理 rar およびSQL回復ソフトウェア製品。 詳細については、次のWebサイトをご覧ください。 WWW。datanumen.com

今すぐ共有:

コメントは締め切りました。