Vb6 如何从模具调用visio宏

Vb6 如何从模具调用visio宏,vb6,macros,visio,Vb6,Macros,Visio,我已经为Visio编写了一些宏。现在我将它们复制到一个名为Macros.vss的模具中 现在如何调用宏?这完全取决于宏的功能和调用方式。我假设它们只是宏,将在活动Visio页面中执行某些操作 默认情况下,在Visio VBA中,任何不带参数的公用SUB都会添加到Visio Tools->Macros菜单中,位于由保存宏(在本例中为宏)的文档命名的文件夹中,然后按模块名称分成文件夹。如果您是唯一一个使用宏的人,那么您可能不需要做任何其他事情 但是,由于您将它们放在vss文件中,因此我假定您希望将它

我已经为Visio编写了一些宏。现在我将它们复制到一个名为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