可以修改Excel功能區以適合特定的工作。 本練習創建新菜單,這些菜單將用戶指向與他們的任務相關的特定工作表。
在本文中,我們將介紹如何在Excel工作表中創建自定義菜單,如下所示:
本文假定讀者已顯示“開發人員”功能區,並且熟悉VBA編輯器。 如果沒有,請使用Google“ Excel開發人員標籤”或“ Excel代碼窗口”。
工作簿
要使用的工作簿有很多頁。 我們建議您使用此處找到的樣本。 看起來像這樣。
前四頁功能不正常,在本練習中僅用於導航目的。
第五頁將包含此工作簿特有的自定義菜單結構。 目前,除了“測試”按鈕外,它應該為空白。
添加菜單結構
將以下文本塊複製到工作表“ MenuSheet”的單元格A1中。
級別,標題,位置/宏,分隔線
1,用戶工具10
2,Show Dashboard,SelectDashboard
2,添加新的,TRUE
3,客戶,選擇客戶
3,位置,選擇位置
3,經理,選擇經理
2,關閉,關閉文件
格式化菜單結構
此CSV數據最終出現在A列中。要將其格式化為單獨的Excel單元格,請選擇A列,然後使用 “文本到列” ,詳見 數據標籤。 分隔符為“逗號”。
上面的代碼添加了適當的代碼後,將在左側提供基於級別的菜單結構。
在本練習中,第一級被任意放置在功能表列的第十項,當工作簿顯示完整寬度時,您將會看到這一點。
創建和銷毀菜單
由於我們只需要該特定工作簿的新菜單,因此我們將在打開和關閉工作簿時創建並銷毀它們。
以下程式碼只是一個開始。它會在工作簿開啟或關閉時觸發。請將其複製到工作簿的一個模組中。
將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損壞 否則所有未備份的工作都會遺失。
作者簡介:
Felix Hooker是的數據恢復專家 DataNumen,Inc.是數據恢復技術的全球領導者,包括 修復rar 和sql恢復軟件產品。 欲了解更多信息,請訪問 萬維網。datanumen.COM



