Vb6 如何从模具调用visio宏
我已经为Visio编写了一些宏。现在我将它们复制到一个名为Macros.vss的模具中Vb6 如何从模具调用visio宏,vb6,macros,visio,Vb6,Macros,Visio,我已经为Visio编写了一些宏。现在我将它们复制到一个名为Macros.vss的模具中 现在如何调用宏?这完全取决于宏的功能和调用方式。我假设它们只是宏,将在活动Visio页面中执行某些操作 默认情况下,在Visio VBA中,任何不带参数的公用SUB都会添加到Visio Tools->Macros菜单中,位于由保存宏(在本例中为宏)的文档命名的文件夹中,然后按模块名称分成文件夹。如果您是唯一一个使用宏的人,那么您可能不需要做任何其他事情 但是,由于您将它们放在vss文件中,因此我假定您希望将它
现在如何调用宏?这完全取决于宏的功能和调用方式。我假设它们只是宏,将在活动Visio页面中执行某些操作 默认情况下,在Visio VBA中,任何不带参数的公用SUB都会添加到Visio Tools->Macros菜单中,位于由保存宏(在本例中为宏)的文档命名的文件夹中,然后按模块名称分成文件夹。如果您是唯一一个使用宏的人,那么您可能不需要做任何其他事情 但是,由于您将它们放在vss文件中,因此我假定您希望将它们分发给其他人 当以编程方式添加时,Visio以及工具栏和按钮的工作方式有些有趣(我说的有趣是恼人)。不幸的是,当您使用UIObject和toolbar以及ToolbarItem类创建工具栏时,Visio将假定您调用的代码位于活动图形中,而不能位于模具中。因此,我可以为您提供一些关于使用这些类的指导,但基本上它包括在.vss文件中分发一个.vst模板,在.vst文件中只包含一个子文件 因此,您可以将代码附加到.vss文件中的形状主控形状,而不是使用自定义工具栏,这些形状主控形状在图形文档中删除时执行代码(使用shapesheet中的CALLTHIS和EventDrop事件)。有了这个方法,我就有了一个使用callthis调用的sub,它将一个shape对象作为参数,执行一些代码,然后删除这个shape(如果我不再需要它的话) 最后,您可以通过编程方式操作Visio UI,为宏添加工具栏和按钮。下面是一些示例代码,基本上是我用自己开发的解决方案实现的。如前所述,使用此方法最重要的部分是拥有一个文档模板(.vst),该模板包含一个以字符串为参数的sub(使用下面的代码,它必须命名为RunStencilMacro)。此字符串应为“DocumentName.ModuleName.SubName”。此子项必须从字符串中删除DocumentName,并获取该文档的文档对象句柄。然后它必须使用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
这完全取决于宏的功能以及如何调用它们。我假设它们只是宏,将在活动Visio页面中执行某些操作 默认情况下,在Visio VBA中,任何不带参数的公用SUB都会添加到Visio Tools->Macros菜单中,位于由保存宏(在本例中为宏)的文档命名的文件夹中,然后按模块名称分成文件夹。如果您是唯一一个使用宏的人,那么您可能不需要做任何其他事情 但是,由于您将它们放在vss文件中,因此我假定您希望将它们分发给其他人 当以编程方式添加时,Visio以及工具栏和按钮的工作方式有些有趣(我说的有趣是恼人)。不幸的是,当您使用UIObject和toolbar以及ToolbarItem类创建工具栏时,Visio将假定您调用的代码位于活动图形中,而不能位于模具中。因此,我可以为您提供一些关于使用这些类的指导,但基本上它包括在.vss文件中分发一个.vst模板,在.vst文件中只包含一个子文件 因此,您可以将代码附加到.vss文件中的形状主控形状,而不是使用自定义工具栏,这些形状主控形状在图形文档中删除时执行代码(使用shapesheet中的CALLTHIS和EventDrop事件)。有了这个方法,我就有了一个使用callthis调用的sub,它将一个shape对象作为参数,执行一些代码,然后删除这个shape(如果我不再需要它的话) 最后,您可以通过编程方式操作Visio UI,为宏添加工具栏和按钮。下面是一些示例代码,基本上是我用自己开发的解决方案实现的。如前所述,使用此方法最重要的部分是拥有一个文档模板(.vst),该模板包含一个以字符串为参数的sub(使用下面的代码,它必须命名为RunStencilMacro)。此字符串应为“DocumentName.ModuleName.SubName”。此子项必须从字符串中删除DocumentName,并获取该文档的文档对象句柄。然后它必须使用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