Как программно добавить кнопку панели инструментов (и обработчик OnClick) в Excel - PullRequest
3 голосов
/ 27 февраля 2009

Как программно добавить панель инструментов (с кнопками на ней) в Excel (2002 или позже)?

Когда кнопка нажата, я хочу, чтобы обработчик создал мой COM объект и вызвать метод на нем?

Ответы [ 2 ]

7 голосов
/ 27 февраля 2009

Это основа для того, что должно работать на версиях до , но не включает Excel 2007, который имеет совершенно другой интерфейс.

Это входит в ваш модуль ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    DeleteCommandBar
End Sub
Private Sub Workbook_Open()
    ShowToolbar
End Sub

И это может идти в том же модуле или в отдельном, по вашему выбору, хотя я предпочитаю помещать его в свой собственный модуль, где он может быть более заметным. Вам не нужен OnClick, кнопке сообщается, какую процедуру вызывать при создании кнопки.

Private Const TOOLBARNAME = "MyFunkyNewToolbar"

Public Sub ShowToolbar()
' Assumes toolbar not already loaded '
    Application.CommandBars.Add TOOLBARNAME
    AddButton "Button caption", "This is a tooltip", 526, "NameOfASubInYourVBACode"
    ' call AddButton more times for more buttons '
    With Application.CommandBars(TOOLBARNAME)
        .Visible = True
        .Position = msoBarTop
    End With
End Sub

Private Sub AddButton(caption As String, tooltip As String, faceId as Long, methodName As String)
Dim Btn As CommandBarButton
    Set Btn = Application.CommandBars(TOOLBARNAME).Controls.Add
    With Btn
        .Style = msoButtonIcon
        .FaceId = faceId ' choose from a world of possible images in Excel: see http://www.ozgrid.com/forum/showthread.php?t=39992 '
        .OnAction = methodName
        .TooltipText = tooltip
    End With        
End Sub

Public Sub DeleteCommandBar()
    Application.CommandBars(TOOLBARNAME).Delete
End Sub
2 голосов
/ 27 февраля 2009

Вы можете написать надстройку Excel, которая создает панель инструментов с вашей кнопкой и кодом COM-вызова , а затем удалить созданный вами файл .xla в пользовательскую папку XLStart .

...