我已經爲Visio寫了一些宏。現在我將它們複製到一個名爲Macros.vss的模板上。現在我怎樣才能調用我的宏?如何從模板調用Visio宏
回答
這一切都取決於宏是什麼以及你想怎麼稱呼它們。我將假設他們只是在活動的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
- 1. 線框模板:visio,visual studio?
- 2. 將Visio宏導出到Visio COM-Add-in
- 3. 從宏調用宏
- 4. 使宏可用於任何Visio文檔
- 5. 如何間接調用Jinja2模板中的宏?
- 6. 如何從模板調用方法?
- 7. 如何從kendoListView模板調用函數
- 8. 如何從angularJS模板調用encodeURIComponent?
- 9. 如何從Jinja模板調用方法?
- 10. 嫩枝 - 使用宏從父模板
- 11. 如何在XSLT調用模板從另一個模板1.0
- 12. jsRender - 如何從嵌套模板調用外部模板
- 13. 如何從Play Framework中的其他模板調用模板?
- 14. 如何從樹枝模板調用一個php模板
- 15. 從另一個速度模板調用宏
- 16. 從另一個模板調用模板
- 17. 從模板中調用變量模板
- 18. 用於模擬接口的任何Visio模板?
- 19. 如何從另一個模板中調用全局模板/加載項中的宏函數?
- 20. 如何在打開「Word宏啓用模板」時啓動宏?
- 21. 如何用模板宏重寫這個宏?
- 22. 從SAS宏調用宏
- 23. Visio VBA訪問宏源
- 24. Umbraco4:如何編輯模板中的宏?
- 25. 如何包含模板::工具包 - 宏?
- 26. 從模板調用路線
- 27. XSLT - 從模板調用
- 28. 調用從模板子類
- 29. Visio模板繪製網頁樣機
- 30. 右邊的Visio Dock模板窗口
非常感謝。對於這個偉大的解釋! – minduser 2010-03-15 12:31:08