程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Access數據庫 >> 關於Access數據庫 >> VBA自定義菜單和菜單欄(一)

VBA自定義菜單和菜單欄(一)

編輯:關於Access數據庫

Excel中,我們的操作都是通過“工具欄、菜單欄、快捷菜”單實現。Excel通過菜單給我們提供基本操作功能之外,也為我們提供了擴展自定義功能的接口,即自定義自己的工具欄、菜單欄。

本文著重介紹如何在 Excel 2003版本中通過編程方式自定義菜單和菜單欄方法。其中包含Excel 中管理和自定義菜單欄、菜單、命令、子菜單和快捷菜單,我將通過代碼實例分步說明。

與大家分享關於VBA實現菜單欄管理與自定義菜單欄功能的實現。

一、簡介

Microsoft Excel 2000以上版本中實現許與自定義菜單欄和菜單相關的常見任務,可以使用“自定義”對話框(見圖1.1)。但如果要實現較高級任務或為自定義程序定制菜單欄和菜單,就需要創建 Microsoft Visual Basic for Applications (VBA) 代碼。

 

有關如何使用“自定義”對話框的更多信息,你可以單擊“幫助”菜單上的“Microsoft Excel 幫助”,在“Office 助手”或“搜索向導”中鍵入自定義菜單欄,然後單擊“搜索”查看主題。

二、命令欄

Microsoft Office 中,所有工具欄、菜單欄和快捷菜單都是被作為“命令欄”這樣一種對象以編程方式控制的。下列所有項目在 VBA 中皆用 CommandBar 對象表示:

l    菜單欄、工具欄和快捷菜單。

l    菜單欄和工具欄上的菜單。

l    菜單、子菜單和快捷菜單上的子菜單。

您可以修改任何內置的菜單欄和工具欄,還可以創建和修改用您自己的 VBA 代碼交付的自定義工具欄、菜單欄和快捷菜單。您可以將程序功能以單個按鈕的形式放在工具欄上,或以命令名稱組的形式放在菜單上。因為工具欄和菜單都是命令欄,所以可以使用同一類型的控件。

VBA Microsoft Visual Basic 中,按鈕和菜單項用 CommandBarButton 對象表示。顯示菜單和子菜單的彈出控件用 CommandBarPopup 對象表示。在以下示例中,名為“Menu”的控件和名為“Submenu”的控件都是用於顯示菜單和子菜單的彈出控件,並且這兩個控件是各自的控件集中唯一的 CommandBar 對象。

Microsoft Excel 中,菜單欄和工具欄被視為是同一種可編程對象,即 CommandBar 對象。可以使用 CommandBar 對象中的控件來指代菜單、菜單項、子菜單和快捷菜單。可以在 Type 參數中使用一個常量為每個控件指定要用於菜單、子菜單或命令的控件類型。

三、控件常量

下面是 Excel 2003 中的各種控件常量的列表,這些常量指定用於特定菜單欄控件的圖形控件類型:

MsoControlActiveX*

MsoControlAutoCompleteCombo***

MsoControlButton

MsoControlButtonDropdown

MsoControlButtonPopup

MsoControlComboBox

MsoControlCustom

MsoControlDropdown

MsoControlEdit

MsoControlExpandingGrid

MsoControlGauge

MsoControlGenericDropdown

MsoControlGraphicCombo

MsoControlGraphicDropdown

MsoControlGraphicPopup

MsoControlGrid

MsoControlLabel

MsoControlLabelEx***

MsoControlOCXDropDown

MsoControlPane **

MsoControlPopup

MsoControlSpinner***

MsoControlSplitButtonMRUPopup

MsoControlSplitButtonPopup

MsoControlSplitDropdown

MsoControlSplitExpandingGrid

MsoControlWorkPane**

* 表示 Microsoft Excel 2000 中的新增項

** 表示 Microsoft Excel 2002 中的新增項

*** 表示 Microsoft Office Excel 2003 中的新增項

 

四、菜單欄

菜單欄是一種命令欄。它是一種可在其中添加菜單、菜單項和子菜單的對象。

有關如何在 Excel 中管理菜單欄和菜單項的更多信息,請按照下列步驟操作:

1. 啟動 Microsoft Visual Basic 編輯器。

2. 在“幫助”菜單上,單擊“Microsoft Visual Basic 幫助”。

3. 在“Office 助手”框或“應答向導”框中,鍵入菜單欄,然後單擊“搜索”。

4. Excel 2003 Excel 2002 中,單擊“添加和管理菜單欄和菜單項”。在 Excel 2000 中,單擊“關於菜單和工具欄”。

可以在運行時修改菜單欄及該菜單欄上的控件。對菜單欄所做的更改可能會影響菜單欄的外觀或位置。可對控件進行的更改取決於控件類型。下表列出了最常見的屬性和常用於更改控件的狀態、操作或內容的方法:

屬性或方法

用途

Add

添加菜單欄,方法是使用 CommandBars 對象集合的 Add 方法,然後為 Menubar 參數指定 TRUE 值。

Enabled

如果 Enabled 屬性的值為 TRUE,那麼用戶可以使用 Visual Basic 代碼使指定的菜單欄可見。如果 Enabled 屬性的值為 FALSE,用戶就無法讓菜單欄可見。不過,菜單欄將出現在可用命令欄列表中。

Protection

使您可以通過特定用戶操作來保護菜單欄。

Position

指定新菜單欄相對於程序窗口的位置。菜單欄相對於程序窗口的位置可以是以下 MsoBarPosition 常量屬性之一:msoBarLeftmsoBarTopmsoBarRightmsoBarBottommsoBarFloatingmsoBarPopup(用於創建快捷菜單)或 msoBarMenuBar(僅用於 Apple Macintosh)。

Visible

定控件是可見的指,還是隱藏的。

4.1 Add方法應用於CommandBars對象

新建一個命令欄並添加到命令欄集合。返回 CommandBar 對象。

expression.Add ( Name , Position , MenuBar , Temporary )

l         expression必需。該表達式返回一個 CommandBars 對象。

l         NameVariant 類型)可選。新命令欄的名稱。如果忽略該參數,則為命令欄指定默認名稱(例如:Custom 1)。

l         PositionVariant 類型)可選。新命令欄的位置或類型。可以為下表所列的 MsoBarPosition 常量之一。

常量

說明

msoBarLeftmsoBarTopmsoBarRight msoBarBottom

指定新命令欄的左側、頂部、右側和底部坐標

msoBarFloating

指定新命令欄不固定

msoBarPopup

指定新命令欄為快捷菜單

msoBarMenuBar

僅適用於 Macintosh

 

l         MenuBar  (Variant類型)可選。設置為 True 將以新命令欄替換活動菜單欄。默認值為 False

l         Temporary  (Variant類型)可選。設置為 True 將使新命令欄為臨時命令欄。臨時命令欄在關閉容器應用程序時刪除。默認值為 False

4.2返回命令欄控件的 ID

以下代碼示例返回活動菜單欄的 ID

Sub Id_Control ()

Dim myId as Object

   Set myId = CommandBars("Worksheet Menu Bar").Controls("工具(&T)")

   MsgBox myId.Caption & Chr(13) & MyId.Id

End Sub

4.3確定活動菜單欄的名稱

以下代碼示例返回活動菜單欄的名稱:

Sub MenuBars_GetName()

   MsgBox CommandBars.ActiveMenuBar.Name

End Sub

4.4保存(內置或自定義菜單欄的)活動狀態

您可能需要將 originalMenuBar 變量聲明為公共變量,這樣,子例程就可以在其他子例程(如 Auto_Close 子例程)中使用該變量。以這種方式聲明和使用該變量會將用戶的上一個菜單欄重置為初始狀態。以下示例宏重置菜單欄:

Public originalMenuBar as Object

Sub MenuBars_Capture()

   Set originalMenuBar = CommandBars.ActiveMenuBar

End Sub

4.5創建自定義命令欄

以下代碼示例創建名為 My Command Bar 的自定義命令欄:

Sub MenuBar_Create()

Application.CommandBars.Add Name:="My command bar"

End Sub

您還可以通過使用 Temporary:=True 參數來創建自定義命令欄。Temporary:=True 參數允許命令欄在您退出 Excel 時自動重置。以下代碼使用 Temporary:=True 參數創建自定義命令欄:

Sub MenuBar_Create()

Application.CommandBars.Add Name:="My command bar", Temporary:=True

End Sub

4.6顯示自定義命令欄

以下示例創建並顯示自定義的“My Custom Bar”菜單欄,然後用它替換內置的菜單欄:

Sub MenuBar_Show()

Dim myNewBar As Object

   Set myNewBar = CommandBars.Add(Name:="Custom1", Position:=msoBarFloating)

   '您必須先啟用您的自定義菜單欄,然後看見它。

   '使菜單欄添加到自定義對話框列表中的可用菜單欄上。

'設置菜單屬性設置為True取代內置的菜單欄。

   myNewBar.Enabled = True

   myNewBar.Visible = True

End Sub

4.7刪除自定義命令欄

以下代碼示例刪除名為“Custom 1”的自定義菜單欄:

Sub MenuBar_Delete()

   CommandBars("Custom1").Delete

End Sub

4.8隱藏命令欄

以下代碼示例從可用菜單欄列表中刪除內置“圖表”菜單欄:

Sub MenuBar_Display()

   CommandBars("Chart").Enabled = False

End Sub

4.9顯示命令欄

以下代碼示例從可用菜單欄中添加內置“圖表”菜單欄:

Sub MenuBar_Display()

   CommandBars("Chart").Enabled = True

End Sub

4.10還原內置命令欄

還原菜單欄會重置(菜單和菜單項的)默認控件。示例代碼還原內置“圖表”菜單欄:

Sub MenuBar_Restore()

   CommandBars("Chart").Reset

End Sub

注意:您只能重置內置菜單欄,不能重置自定義菜單欄。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved