如何在 VBA 中自定義 Excel 2016 快捷菜單

在 Excel 2007 之前,VBA 程序員使用 CommandBar 對象來創建自定義菜單、自定義工具欄和自定義快捷(右鍵單擊)菜單。從 Excel 2007 開始,CommandBar 對象處於一個相當奇怪的位置。如果您編寫代碼來自定義菜單或工具欄,Excel 會攔截該代碼並忽略您的許多命令。

Excel 2007(與更高版本一樣)不會顯示經過深思熟慮的界面增強功能,而是將您的自定義菜單和工具欄轉儲到名為“加載項”的全能功能區選項卡中。

菜單和工具欄自定義最終出現在加載項 → 菜單命令或加載項 → 自定義工具欄組中。但是自定義快捷菜單(也使用 CommandBar 對象)仍然像往常一樣工作 - 好吧,有點。

底線?CommandBar 對像不再有用,但它仍然是自定義快捷菜單的唯一方法。

向單元格快捷菜單中添加新項目

在下面,您將找到向右鍵單擊單元格時出現的快捷菜單添加新項目的示例代碼。您應該能夠根據自己的需要調整這些示例。

您可以通過從 Cell 快捷菜單中使其可用來稍微增強 Change Case 實用程序。

AddToShortcut 過程向 Cell 快捷菜單添加了一個新菜單項。您可以通過更改名為 NewControl 的對象的 Caption 和 OnAction 屬性來調整它以指向您自己的宏。

子 AddToShortCut()
  Dim Bar 作為 CommandBar
  將 NewControl 調暗為 CommandBarButton
  從快捷方式刪除
  Set Bar = Application.CommandBars(“Cell”)
  設置 NewControl = Bar.Controls.Add _
     (類型:=msoControlButton,ID:=1,_
     臨時:=真)
  使用新控件
    .Caption = “&Change Case”
    .OnAction = “ChangeCase”
    .Style = msoButtonIconAndCaption
  結束於
結束子

當您修改快捷菜單時,該修改將一直有效,直到您重新啟動 Excel。換句話說,當您關閉包含 VBA 代碼的工作簿時,修改後的快捷菜單不會自行重置。因此,如果您編寫代碼來修改快捷菜單,您幾乎總是編寫代碼來反轉修改的效果。

DeleteFromShortcut 過程從 Cell 快捷菜單中刪除新菜單項:

子 DeleteFromShortcut()
  出錯時繼續下一步
  Application.CommandBars(“Cell”).Controls _
    (“&Change Case”)。刪除
結束子

這顯示了右鍵單擊單元格後新菜單項的顯示方式。

如何在 VBA 中自定義 Excel 2016 快捷菜單

顯示自定義菜單項的單元格快捷菜單:更改案例。

聲明幾個變量之後的第一個實際命令調用 DeleteFromShortcut 過程。此語句確保在快捷單元格菜單上只出現一個 Change Case 菜單項。嘗試註釋掉該行(在該行的開頭放一個撇號)並運行該過程幾次——但不要被沖昏頭腦!

右鍵單擊一個單元格,您可以看到 Change Case 菜單項的多個實例。通過多次運行 DeleteFromShortcut 刪除所有條目(每個額外的菜單項一次)。

最後,您需要一種在工作簿打開時添加快捷菜單項並在工作簿關閉時刪除菜單項的方法。這樣做很容易。只需將這兩個事件過程添加到 ThisWorkbook 代碼模塊:

私有子工作簿_Open()
調用 AddToShortCut
結束子
Private Sub Workbook_BeforeClose(Cancel As Boolean)
調用 DeleteFromShortcut
結束子

Workbook_Open 過程在工作簿打開時執行,Workbook_BeforeClose 過程在工作簿關閉之前執行。正是醫生囑咐的。

Excel 2013 和 Excel 2016 有什麼不同?

如果您在 Excel 2007 或更早版本中使用 VBA 處理快捷菜單,則需要注意一項重大更改。

過去,如果您的代碼修改了快捷菜單,則該修改對所有工作簿都有效。例如,如果您向“單元格”右鍵單擊菜單中添加了一個新項目,則當您右鍵單擊任何工作簿(以及您稍後打開的其他工作簿)中的一個單元格時,該新項目就會出現。換言之,快捷菜單修改是在應用程序級別進行的。

Excel 2013 和 Excel 2016 使用單個文檔界面,這會影響快捷菜單。您對快捷菜單所做的更改僅影響活動工作簿窗口。當您執行修改快捷菜單的代碼時,活動窗口以外的窗口的快捷菜單不會改變。這與過去的工作方式完全不同。

另一個變化:如果用戶在活動窗口顯示修改後的快捷菜單時打開工作簿(或創建新工作簿),新工作簿也會顯示修改後的快捷菜單。換句話說,新窗口顯示的快捷菜單與打開新窗口時處於活動狀態的窗口相同。

底線:過去,如果您打開修改了快捷菜單的工作簿或加載項,您可以確信修改後的快捷菜單將在所有工作簿中可用。你不再有這種保證。

在 Access 2007 中建立自訂快捷選單

與更高版本相比,Access 2007 中的巨集設計視窗有所不同,因此如果您使用的是 Access 2007,請展開以下部分以進行操作。

對於 Access 2007,步驟 1:建立包含選單命令的巨集組

在此步驟中,您將建立一個巨集群組,其中每個巨集都將是快速選單上的單獨命令。

什麼是宏組?

巨集組是包含兩個或多個獨立巨集的單一巨集物件。透過在「巨集名稱」欄位中鍵入每個巨集的名稱來識別各個巨集。在下圖中,  Macro3 是一個巨集組。 NotFoundMsg 和 FoundMsg 是群組內的單獨宏,每個宏由兩個宏操作組成。

巨集組範例

注意: 預設情況下,巨集名稱列  是隱藏的。若要顯示 「巨集名稱」 列,請在 「設計」 標籤的 「顯示/隱藏」 群組中按一下 「巨集名稱」

  1. 在 「建立」 標籤的 「其他」 群組中,按一下 「巨集」。如果此命令不可用,請按一下「 模組」 或 「類別模組」 按鈕下方的箭頭,然後按一下 「巨集」

  2. 在 “設計” 標籤的 “顯示/隱藏” 群組中,按一下 “巨集名稱” 以顯示 “巨集名稱” 列。

  3. 對於您想要在自訂快捷選單上顯示的每個命令:

    • 在 「巨集名稱」 欄位中,輸入要在快速選單上顯示的文字(例如「列印報告」或「儲存」)。

      注意: 若要建立存取鍵以便可以使用鍵盤選擇指令,請在指令名稱中要作為存取鍵的字母前鍵入與號 (&)(例如「&Save」)。這封信將在菜單上加下劃線。
    • 在 「操作」 列中,選擇按一下快速選單上的命令時要執行的第一個操作。

    • 如果選擇此命令時要執行更多操作,請將它們新增至後續行。對於每個後續操作,將 巨集名稱 儲存格留空。

      注意: 若要在兩個選單指令之間建立一行,請在  對應選單指令之間的「巨集名稱」欄位中鍵入連字號 (-)。
  4. 儲存並命名宏,例如  mcrShortcutMenuCommands

下圖顯示了自訂選單或快速選單的範例巨集組。

設計視圖中的選單巨集組

對於 Access 2007 第 2 步:建立用於建立選單的巨集

此步驟可能看起來多餘,但要從步驟 1 建立的巨集群組建立快速選單,您必須建立第二個包含 AddMenu 巨集 操作的巨集。該宏有時稱為“選單宏”。

  1. 在 「建立」 標籤的 「其他」 群組中,按一下 「巨集」。如果此命令不可用,請按一下「 模組」 或 「類別模組」 按鈕下方的箭頭,然後按一下 「巨集」

  2. 在巨集的第一行,選擇 「操作」清單 中的 「新增功能表」  。

  3. 在 「操作參數」下的 「選單名稱」 方塊中,鍵入選單的名稱(例如「報告命令」)。此參數不是必需的,但如果您計劃在步驟 3 中將選單新增至功能區標籤(例如  表單或報表的加載項標籤),則建議使用此參數。如果在步驟 3 中將選單新增為快速選單,則 選單名稱 參數將被忽略。

  4. 在 「選單巨集名稱」 方塊中,輸入您在步驟 1 中建立的巨集的名稱。

  5. 儲存並命名宏,例如 mcrAddShortcutMenu

下圖顯示了一個範例選單宏,它建立我們在步驟 1 中設計的選單。

設計視圖中的選單宏

對於 Access 2007,步驟 3:將功能表附加到控制項、表單、報表或資料庫

根據您希望選單出現的位置,請使用以下一項或多項流程。

  • 將選單新增至表單或報表的加載項標籤

    如果您希望選單顯示在 特定表單或報表的「加載項」 標籤上,請使用此流程,如下圖所示:

    包含自訂選單的「加載項」標籤

    1. 在導覽窗格中,以滑鼠右鍵按一下要顯示功能表的窗體或報表,然後按一下 「設計檢視」

    2. 在 「設計」 標籤的 「顯示/隱藏」 群組中,按一下 「屬性表」

    3.  透過從「屬性表」任務窗格頂部的清單中選擇 「表單」 或 「報表」來選擇整個物件。

    4. 在  屬性表的 「其他」標籤上的「快速選單」 屬性方塊中,鍵入您在步驟 2 中建立的巨集的名稱(在本範例中為「mcrAddShortcutMenu」)。

      下次開啟表單或報表時,  「加載項」標籤 將會出現在功能區中。按一下選項卡可查看選單。

      有關功能區自訂技術(例如新增自訂標籤或隱藏預設標籤)的詳細信息,請參閱文章 在 Access 中建立自訂功能區

      功能區是 Microsoft Office Fluent 使用者介面的一個元件。

  • 將選單新增為窗體、報表或控制項的快速選單

    如果您希望在右鍵點選特定窗體、報表或控制項時顯示選單,請使用此流程,如下圖所示:

    一個簡單的快捷菜單

    1. 在導覽窗格中,以滑鼠右鍵按一下要顯示快速選單的窗體或報表,然後按一下 「設計檢視」

    2. 在 「設計」 標籤的 「顯示/隱藏」 群組中,按一下 「屬性表」

    3. 選擇要附加快捷選單的控制項或物件。

      注意: 若要選擇整個對象,請  從「屬性表」任務窗格頂部的清單中選擇「表單」 或 「報表」 。

    4. 在  屬性表的 「其他」標籤上的「快速選單列」 屬性方塊中,鍵入您在步驟 2 中建立的巨集的名稱(在本例中為「mcrAddShortcutMenu」)。

  • 新增選單作為全域快捷選單

    此過程將取代目前資料庫中的所有預設快捷選單。附加到特定窗體、報表或控制項的自訂快速選單不受影響。

    1. 按一下 「Microsoft Office 按鈕」  ,然後按一下 「存取選項」

    2. 在 「Access 選項」 對話方塊中,按一下 「目前資料庫」

    3. 在 「功能區和工具列選項」下的 「快速選單列」方塊 中,鍵入您在步驟 2 中建立的巨集的名稱(在本範例中為「mcrAddShortcutMenu」)。

  • 自訂快捷選單會取代其所附加物件的預設快捷選單。如果您想要保留某些 Access 命令以在這些功能表上使用,請使用 RunCommand 操作將這些命令放入您想要的功能表的巨集組中。

  • 附加到控制項的自訂快捷選單將取代資料庫中定義的任何其他自訂快捷選單。附加到窗體或報表的自訂快捷選單將取代自訂全域快捷選單。

  • 當您為窗體、報表或資料庫指定選單巨集時,只要開啟窗體、報表或資料庫,Access 就會執行此功能表巨集。如果在窗體、報表或資料庫開啟時對選單巨集或定義其命令的巨集組進行更改,則必須關閉窗體、報表或資料庫並重新開啟它才能看到更改。

  • 若要建立子選單,請依照步驟 1 建立一個僅包含子選單命令的單獨巨集組。然後,再次依照步驟 1 定義上級選單的指令。使用AddMenu巨集操作將子選單新增為進階巨集組中的項目  。下圖顯示了包含子選單的選單的巨集組,然後顯示了產生的快速選單。巨集組中的第三行建立 「匯出到...」 子選單 ( mcrSubMenu )。

    包含子選單的快捷選單

    您可以使用  每個層級選單的巨集組中的AddMenu操作來建立多個層級的子選單。確保  為每個 AddMenu操作的選單名稱參數提供一個值 ,否則子選單將在更高層級的選單中顯示為空白行。

  • 僅頂級選單宏支援巨集條件。換句話說,您可以在選單巨集中使用條件來確定是否顯示特定選單或快速選單,但僅限於頂層選單。您不能使用條件來顯示或隱藏選單上的命令或子選單。您也可以使用條件來隱藏或顯示自訂快捷選單或全域快捷選單。

  • 或者,您在步驟 2 中建立的選單巨集可以是巨集組的一部分。例如,如果您有多個針對不同物件或控制項的快速選單,則可以建立包含所有必要的選單巨集的巨集物件。確保顯示 “巨集名稱” 列並為每個巨集鍵入唯一的名稱。在步驟 3 中,使用下列符號來引用巨集:  Macrogroupname.macroname。例如,  mcrAddShortcutMenus.AddMenu2

Leave a Comment

HTKK 5.0.3

HTKK 5.0.3

HTKK 是稅務總局免費發布的報稅支援軟體,提供企業快速建立報稅表。了解HTKK的安裝步驟與升級功能。

有用的 Microsoft Power Query 日期函數

有用的 Microsoft Power Query 日期函數

探索 Excel 中的 Microsoft Power Query 日期函數,快速處理日期計算和操作,其中包含添加天數、提取日期部分等功能的詳細說明。

如何在 Excel 2019 中使用 3D 地圖功能

如何在 Excel 2019 中使用 3D 地圖功能

3D 地圖是 Excel 2019 中提供的令人興奮的可視化分析功能,讓你能夠在 Excel 中創建動態的 3D 地圖。探索如何利用這項技術提升數據分析的效果。

如何在 Excel 中使用 SKEW 和 SKEW.P 函數

如何在 Excel 中使用 SKEW 和 SKEW.P 函數

了解如何在 Excel 中使用 SKEW 和 SKEW.P 函數來衡量數據分佈的偏度,這對於分析數據的對稱性至關重要。

如何為 Excel 儀表板創建時間線切片器

如何為 Excel 儀表板創建時間線切片器

時間軸切片器的工作方式與標準切片器的工作方式相同,因為它允許您使用視覺選擇機製過濾數據透視表。了解如何在 Excel 中使用時間軸切片器來高效管理日期字段。

如何在 Excel 2016 中使用 XLOOKUP 函數

如何在 Excel 2016 中使用 XLOOKUP 函數

了解如何在 Excel 2016 中使用 XLOOKUP 函數,這是一個 VLOOKUP 函數的優秀替代品,具有更強大和靈活的功能!

智能表9.1.1

智能表9.1.1

Smartsheet 是一個動態工作平台,可讓您管理專案、建立工作流程以及與團隊合作。

共享點

共享點

SharePoint 是一個基於 Web 的協作系統,它使用各種工作流程應用程式、「清單」資料庫和其他 Web 元件以及安全功能來控制業務群組的協同工作。

萬年曆1.0.38/1.0.36

萬年曆1.0.38/1.0.36

萬年日曆是一款手機上的日曆檢視應用程式,可協助您在手機上快速查看陰陽日期,從而安排您的重要工作。

微軟 Outlook 2021

微軟 Outlook 2021

Microsoft Outlook 是由 Microsoft Corporation 開發的商業和生產力應用程式。