我为Visio编写了一些宏。现在我将这些复制到名为Macros.vss的模板中 我现在该如何调用我的宏?
答案 0 :(得分:1)
这完全取决于宏的功能以及您希望如何调用它们。我将假设它们只是将在活动的Visio页面中执行某些操作的宏。
默认情况下,在Visio VBA中,任何没有参数的公共subs都会添加到Visio Tools-> Macros菜单中,在包含宏的文档(在本例中为Macros)命名的文件夹中,然后按模块分隔为文件夹名称。如果您是唯一使用宏的人,那么您可能不需要做任何其他事情。
但是,既然你把它们放在一个vss文件中,我会假设你想把它们分发给其他人。
当以编程方式添加时,Visio以及工具栏和按钮的工作方式有一些有趣的(有趣的是我的意思是令人恼火)。不幸的是,当您使用UIObject和Toolbar以及ToolbarItem类创建工具栏时,Visio将假设您调用的代码驻留在活动图形中,并且不能位于模板中。所以我可以给你一些关于使用这些类的指导,但基本上它包括分发.vst模板和你的.vss文件,只有.vst文件中的一个必需子。
因此,您可以将代码附加到.vss文件中的形状母版,而不是使用自定义工具栏,这些代码在将代码放到图形文档上时执行代码(使用CALLTHIS和结构图中的EventDrop事件)。使用这种方法,我只有一个使用callthis调用的子函数,它将一个shape对象作为参数,执行一些代码,然后删除形状(如果我不再需要它)。
最后,您可以通过编程方式操作Visio UI,为宏添加工具栏和按钮。下面是一些示例代码,基本上就是我使用我开发的解决方案的方式。正如我上面提到的,使用此方法最重要的部分是拥有一个文档模板(.vst),它包含一个以字符串作为参数的子代码(下面的代码必须命名为RunStencilMacro)。该字符串应为“DocumentName.ModuleName.SubName”。此子必须从文档中取出DocumentName,并获取该文档的Document对象句柄。然后它必须使用ModuleName.SubName部分对该文档执行ExecuteLine。你必须逐步完成代码并弄清楚一些事情,但是一旦你掌握了正在发生的事情就应该有意义。
我不确定使用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