2010-03-08 77 views

回答

1

這一切都取決於宏是什麼以及你想怎麼稱呼它們。我將假設他們只是在活動的Visio頁面中執行某些內容的宏。

默認情況下,在Visio VBA中,任何沒有參數的公共子文件都會被添加到Visio Tools-> Macros菜單中,由保存宏的文檔所指定的文件夾中(在本例中爲宏),然後通過模塊名稱。如果你是唯一使用宏的人,那麼你可能不需要做其他任何事情。

但是,既然你把它們放在一個vss文件中,我假設你想把它們分發給其他人。

有一些有趣的事(有趣的我的意思是惱人的)關於Visio以及如何工具欄和按鈕工作,當以編程方式添加。不幸的是,當您使用UIObject和Toolbar和ToolbarItem類創建工具欄時,Visio將假定您要調用的代碼位於活動繪圖中,並且不能位於模具中。所以我可以給你一點關於使用這些類的指導,但基本上它包括髮佈一個.vst模板和你的.vss文件,只需要.vst文件中的一個必需的子文件。

因此,您可以將代碼附加到.vss文件中的形狀主體,以便在代碼被放置在圖形文檔上時(使用CALLTHIS和形狀表中的EventDrop事件)執行代碼,而不是使用自定義工具欄。使用這種方法,我只需要一個使用callthis調用的sub,它將形狀對象作爲參數,執行一些代碼,然後刪除形狀(如果我不想再使用它)。

最後,您可以通過編程操作Visio UI爲您的宏添加工具欄和按鈕。以下是一些示例代碼,基本上是我使用我開發的解決方案進行的。正如我上面提到的,使用這種方法最重要的部分是擁有一個文檔模板(.vst),該模板包含一個將字符串作爲參數的子文件(下面的代碼必須命名爲RunStencilMacro)。該字符串應該是「DocumentName.ModuleName.SubName」。這個子必須從文檔中取出文檔名稱,並獲取該文檔的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 
+0

非常感謝。對於這個偉大的解釋! – minduser 2010-03-15 12:31:08