對 Microsoft Office 命令欄進行更多編程(2)

來源:互聯網
上載者:User
編程 可以使用如下所示的代碼測試該函數:

Public Sub TestAddComboBoxToCommandBar()

    ' 用途:測試 AddComboBoxToCommandBar 函數。

    Dim strChoices(4) As String
    
    strChoices(1) = "Vanilla"
    strChoices(2) = "Chocolate"
    strChoices(3) = "Strawberry"
    strChoices(4) = "Other"
    
    If AddComboBoxToCommandBar("Tools", "Favorite Ice Cream", _
        strChoices) = True Then
        
        MsgBox "組合框已成功添加。"
        
    Else
    
        MsgBox "未能添加組合框。"
        
    End If
    
End Sub

禁用和隱藏命令欄與命令列控制項
開發 Office 解決方案時,您可能需要防止使用者在與該解決方案關聯的某些命令欄和命令列控制項上單擊。例如,您可能需要防止使用者單擊“表單”工具列上的任何控制項,以免修改您在 Microsoft Word 中建立的自訂表單。您也可能需要為給定的解決方案禁用“工具”菜單上的“宏”命令。

將命令欄或命令列控制項的 Enabled 屬性設定為 False 可禁用命令欄或命令列控制項;同樣,將命令欄或命令列控制項的 Enabled 屬性設定為 True 可啟用命令欄或命令列控制項。

將命令欄或命令列控制項的 Visible 屬性設定為 False 可隱藏命令欄或命令列控制項;同樣,將命令欄或命令列控制項的 Visible 屬性設定為 True 可顯示命令欄或命令列控制項。

要嘗試此操作,請將以下程式碼輸入到“立即”視窗。每個程式碼將切換指定的命令欄或命令列控制項的啟用或可見狀態。如果在 Outlook 或 Microsoft Visual Basic® Editor 中輸入此代碼,請務必使用 Application.ActiveExplorer 或 Application.VBE 術語。要返回到開始時的啟用或可見狀態,請確保將每行運行兩次。

Application.CommandBars("Tools").Enabled = _
  Not Application.CommandBars("Tools").Enabled
Application.CommandBars("Tools").Controls("Macro").Enabled = _
  Not Application.CommandBars("Tools").Controls("Macro").Enabled
Application.CommandBars("Tools").controls("Macro").Visible = _
  Not Application.CommandBars("Tools").controls("Macro").Visible

定位命令欄
命令欄的 Position 屬性指定命令欄在應用程式中的位置。msoBarLeft、msoBarTop、msoBarRight 和 msoBarBottom 枚舉常數指定在應用程式的左邊、上邊、右邊或下邊顯示命令欄。msoBarFloating 枚舉常數指定命令欄不靠接到應用程式的邊緣。msoBarPopup 枚舉常數指定命令欄是快顯功能表。

以下函數更改所指定的命令欄的位置。

Public Function ChangeCommandBarPosition(ByVal strCommandBarName As String, _
        ByVal msoPosition As MsoBarPosition) As Boolean

    ' 用途:更改命令欄的位置。
    ' 接受:
    '   strCommandBarName:要已變更位元置的命令欄名稱。
    ' 返回:如果命令欄移動成功,則為 Ture。
    
    On Error GoTo ChangeCommandBarPosition_Err
    
    ' 將下一行代碼替換為:
    ' Application.ActiveExplorer.CommandBars.Item(strCommandBarName).Position = _
  msoPosition <- 對於 Outlook
    ' Application.VBE.CommandBars.Item(strCommandBarName).Position = _
      msoPosition <- 對於 Visual Basic Editor
    Application.CommandBars.Item(strCommandBarName).Position = msoPosition
    
ChangeCommandBarPosition_End:
    
    ChangeCommandBarPosition = True
    Exit Function
        
ChangeCommandBarPosition_Err:

    ChangeCommandBarPosition = False
    
End Function

可以使用如下所示的代碼測試該函數:

Public Sub TestChangeCommandBarPosition()

    ' 用途:測試 ChangeCommandBarPosition 函數。
    
    If ChangeCommandBarPosition("Standard", msoBarFloating) = True Then
    
        MsgBox "命令欄已成功移動。"
        
    Else
    
        MsgBox "未能移動命令欄。某些命令欄無法" & _
            "以某些方式移動。"
    
    End If
    
End Sub

動態添加和刪除命令欄
有時需要將命令欄與特定 Office 文檔關聯在一起。例如,您需要在特定 Office 文檔開啟時才顯示某些自訂命令欄,並在特定 Office 文檔關閉時將其隱藏。要以編程方式執行此操作,使用 Excel 就是一個不錯的樣本。要測試該操作,請建立一個新的空白活頁簿,然後將 Sheet1 重新命名為 CommandBarInfo。將以下資訊鍵入 CommandBarInfo 活頁簿中:



圖 4:在 Excel 中動態建立命令欄的資訊

在 Visual Basic Editor 中,將以下代碼添加到與新空白活頁簿關聯的新代碼模組中:

Public Function CreateCommandBarPopup() As Boolean

    ' 用途:根據 Excel 工作表中提供的資訊,
    ' 建立一個包含功能表項目的命令欄彈出控制項。
    
    ' 返回:如果命令欄彈出控制項
    ' 成功添加,則為 True。
    
    Dim objWorksheet As Excel.Worksheet
    Dim objCommandBarControl As Office.CommandBarControl
    Dim objCommandBarPopup As Office.CommandBarPopup
    Dim objCommandBarButton As Office.CommandBarButton
    Dim intRow As Integer
    
    On Error GoTo CreateCommandBarPopup_Err
    
    ' 必須將包含命令欄資訊的工作表
    ' 命名為“CommandBarInfo”。
    Set objWorksheet = ThisWorkbook.Sheets("CommandBarInfo")
    
    ' 從以前的版本中刪除該控制項的
    ' 所有現有執行個體。
    For Each objCommandBarControl In Application.CommandBars.Item("Standard").Controls
    
        If objCommandBarControl.Caption = objWorksheet.Cells(1, 1) Then
        
            objCommandBarControl.Delete
            
        End If
        
    Next objCommandBarControl
    
    Set objCommandBarPopup = _
      Application.CommandBars.Item("Standard").Controls.Add(msoControlPopup)
        
    objCommandBarPopup.Caption = objWorksheet.Cells(1, 1)
    
    intRow = 3
    
    ' 一直添加按鈕,直到標題用盡為止。
    Do Until objWorksheet.Cells(intRow, 1) = ""
            
        With objCommandBarPopup
        
            Set objCommandBarButton = .Controls.Add(msoControlButton)
                    
            With objCommandBarButton
                    
                    .Caption = objWorksheet.Cells(intRow, 1)
                    .OnAction = objWorksheet.Cells(intRow, 2)
                                                            
            End With
            
        End With
        
        intRow = intRow + 1
        
    Loop
    
CreateCommandBarPopup_End:

    CreateCommandBarPopup = True
    Exit Function
    
CreateCommandBarPopup_Err:
    
    CreateCommandBarPopup = False
    
End Function

Public Function DeleteCommandBarPopup() As Boolean

    ' 用途:根據 Excel 工作表中提供的資訊,
    ' 刪除命令欄彈出控制項。
    
    ' 返回:如果命令欄彈出控制項被
    ' 成功刪除,則為 True。
    
    Dim objWorksheet As Excel.Worksheet
    Dim objCommandBarControl As Office.CommandBarControl
    
    On Error GoTo DeleteCommandBarPopup_Err
    
    ' 必須將包含命令欄資訊的工作表
    ' 命名為“CommandBarInfo”。
    Set objWorksheet = ThisWorkbook.Sheets("CommandBarInfo")
    
    ' 刪除該控制項的所有現有執行個體。
    For Each objCommandBarControl In Application.CommandBars.Item("Standard").Controls
    
        If objCommandBarControl.Caption = objWorksheet.Cells(1, 1) Then
        
            objCommandBarControl.Delete
            
        End If
        
    Next objCommandBarControl
    
DeleteCommandBarPopup_End:

    DeleteCommandBarPopup = True
    Exit Function
    
DeleteCommandBarPopup_Err:
    
    DeleteCommandBarPopup = False
    
End Function

Public Sub TestMacro()

    ' 用途:提供一個完整性測試宏。
    
    MsgBox "這是測試宏。"
    
End Sub

將以下代碼添加到新空白活頁簿的 ThisWorkbook 模組中:

Private Sub Workbook_Open()
    
    If CreateCommandBarPopup = False Then
    
        MsgBox "未能正確添加快顯功能表。"
    
    Else
    
        MsgBox "快顯功能表已成功添加。"
        
    End If

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    If DeleteCommandBarPopup = False Then
    
        MsgBox "未能正確刪除快顯功能表。"
            
    Else
    
        MsgBox "快顯功能表已成功刪除。"
        
    End If
    
End Sub

儲存並關閉活頁簿,然後重新開啟該活頁簿。請注意,“家務”快顯功能表已添加到“標準”工具列中。還應注意,在關閉此活頁簿時,“家務”快顯功能表將消失。

有關該技術的更詳細版本,請參閱 Excel 資深專家 (MVP) John Walkenbach 提供的解決方案,網址為 http://j-walk.com/ss/excel/tips/tip53.htm(英文)。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。