Все зависит от того, что делают макросы и как вы хотите их называть. Я предполагаю, что это просто макросы, которые будут выполнять что-то на активной странице Visio.
По умолчанию в Visio VBA любые общедоступные подпрограммы без аргументов добавляются в меню Visio Tools-> Macros, в папку с именем документа, содержащего макросы (в данном случае Macros), а затем разделяются на папки по имени модуля. , Если вы единственный, кто использует макросы, вам, вероятно, больше ничего не нужно делать.
Однако, поскольку вы поместили их в файл vss, я предполагаю, что вы хотели бы распространить их среди других людей.
Есть что-то забавное (и под забавным я имею в виду раздражение) в Visio и в том, как работают панели инструментов и кнопки, когда добавляются программно. К сожалению, когда вы создаете панель инструментов с использованием классов UIObject и Toolbar и ToolbarItem, Visio предполагает, что вызываемый вами код находится в активном чертеже и не может быть в трафарете. Поэтому я могу дать вам небольшое руководство по использованию этих классов, но в основном оно состоит в распространении шаблона .vst вместе с вашими файлами .vss, с одним обязательным подпрограммой в файле .vst.
Таким образом, вместо использования настраиваемой панели инструментов, вы можете прикрепить код к мастерам фигур в вашем файле .vss, которые исполняют код, когда они перетаскиваются в чертежный документ (используя CALLTHIS и событие EventDrop в таблице форм). С этим методом у меня просто есть подпрограмма, которая вызывается с использованием callthis, которая принимает объект формы в качестве аргумента, выполняет некоторый код, а затем удаляет форму (если я больше не хочу ее использовать).
И, наконец, вы можете программно управлять пользовательским интерфейсом Visio, чтобы добавить панель инструментов и кнопки для ваших макросов. Ниже приведен пример кода, в основном, как я это делаю с разработанным мною решением. Как я упоминал выше, наиболее важной частью использования этого метода является наличие шаблона документа (.vst), который содержит подпрограмму (с приведенным ниже кодом она должна называться RunStencilMacro), которая принимает строку в качестве аргумента. Эта строка должна быть «DocumentName.ModuleName.SubName». Эта подпрограмма должна извлечь DocumentName из строки и получить дескриптор объекта Document для этого документа. Затем он должен выполнить ExecuteLine для этого документа с частью ModuleName.SubName. Вам придется пройтись по коду и выяснить некоторые вещи, но как только вы поймете, что происходит, это должно иметь смысл.
Я не уверен в каких-либо других способах выполнения макросов в интерактивном режиме с VBA. Я думаю, что exe и COM аддоны могут не иметь этой проблемы с панелями инструментов ...
Private Sub ExampleUI()
Dim UI As Visio.UIObject
Dim ToolbarSet As Visio.ToolbarSet
Dim Toolbars As Visio.Toolbars
Dim Toolbar As Visio.Toolbar
Dim ToolbarItems As Visio.ToolbarItems
Dim ToolbarItem As Visio.ToolbarItem
Dim TotalToolBars As Integer
Dim Toolbarpos As Integer
Const ToolbarName = "My Toolbar"
' Get the UIObject object for the toolbars.
If Visio.Application.CustomToolbars Is Nothing Then
If Visio.ActiveDocument.CustomToolbars Is Nothing Then
Set UI = Visio.Application.BuiltInToolbars(0)
Else
Set UI = Visio.ActiveDocument.CustomToolbars
End If
Else
Set UI = Visio.Application.CustomToolbars
End If
Set ToolbarSet = UI.ToolbarSets.ItemAtID(visUIObjSetDrawing)
' Delete toolbar if it exists already
TotalToolBars = ToolbarSet.Toolbars.Count
For i = 1 To TotalToolBars
Set Toolbar = ToolbarSet.Toolbars.Item(i - 1)
If Toolbar.Caption = ToolbarName Then
Toolbar.Visible = False
Toolbar.Delete
Exit For
End If
Next
' create toolbar
Set Toolbar = ToolbarSet.Toolbars.Add
Toolbar.Caption = ToolbarName
Dim IconPos As Long ' counter to determine where to put a button in the toolbar
IconPos = IconPos + 1
Dim IconFunction As String
IconFunction = """Macros.Module1.SubName"""
Set ToolbarItem = Toolbar.ToolbarItems.AddAt(IconPos)
With ToolbarItem
.AddOnName = "RunStencilMacro """ & IconFunction & """"
.Caption = "Button 1"
.CntrlType = Visio.visCtrlTypeBUTTON
.Enabled = True
.state = Visio.visButtonUp
.Style = Visio.visButtonIcon
.Visible = True
.IconFileName ("16x16IconFullFilePath.ico")
End With
' Now establish the position of this toolbar
With Toolbar
.Position = visBarTop 'Top overall docking area
.Left = 0 'Puts it x pixels from the left
.RowIndex = 13
.Protection = visBarNoCustomize
Toolbar.Enabled = True
.Visible = True
End With
Visio.Application.SetCustomToolbars UI
Visio.ActiveDocument.SetCustomToolbars UI
End Sub