Visio 용 매크로를 작성했습니다. 이제 이것을 Macros.vss라는 스텐실에 복사했습니다. 어떻게하면 지금 내 매크로를 호출 할 수 있습니까?스텐실에서 Visio 매크로를 호출하는 방법
답변
매크로는 매크로의 기능과 호출 방식에 따라 다릅니다. 나는 그들이 단순히 Visio 페이지에서 뭔가를 실행할 매크로라고 가정합니다.
기본적으로 Visio VBA에서는 인수가없는 모든 공용 서브 그룹이 Visio 도구 -> 매크로 메뉴, 매크로 (이 경우 매크로)를 포함하는 문서의 이름이 지정된 폴더에 추가 된 다음 모듈별로 폴더로 분리됩니다 이름. 매크로를 사용하는 유일한 사람이라면 다른 작업을 수행 할 필요가 없을 것입니다.
그러나 vss 파일에 넣었으므로 다른 사람에게 배포하려는 것으로 가정합니다.
프로그래밍 방식으로 추가 할 때 Visio 및 도구 모음과 단추의 작동 방식에 대해 재미 있고 재미 있습니다. 불행히도 UIObject, Toolbar 및 ToolbarItem 클래스를 사용하여 도구 모음을 만들면 Visio는 호출중인 코드가 활성 드로잉에 있다고 가정하고 스텐실에있을 수 없습니다. 따라서 이러한 클래스 사용에 대한 지침을 제공 할 수는 있지만 기본적으로 .vst 파일과 함께 .vst 파일을 배포하고 .vst 파일에 필요한 하위 하나만 있으면됩니다.
따라서 사용자 지정 도구 모음을 사용하지 않고 CALLTHIS 및 셰이프 시트의 EventDrop 이벤트를 사용하여 드로잉 문서에 놓을 때 코드를 실행하는 .vss 파일의 셰이프 마스터에 코드를 첨부 할 수 있습니다. 이 메소드를 사용하면 모양 객체를 인수로 취하고 일부 코드를 실행 한 후 모양을 삭제하는 callthis를 사용하여 하위를 만들 수 있습니다 (더 이상 필요가없는 경우).
마지막으로 Visio UI를 프로그래밍 방식으로 조작하여 매크로에 도구 모음과 단추를 추가 할 수 있습니다. 아래는 몇 가지 샘플 코드입니다. 기본적으로 내가 개발 한 솔루션으로 수행합니다. 앞에서 언급했듯이이 메서드를 사용하는 가장 중요한 부분은 문자열을 인수로 사용하는 하위 코드 (RunStencilMacro라는 코드가 있어야 함)가있는 문서 템플릿 (.vst)을 갖는 것입니다. 이 문자열은 "DocumentName.ModuleName.SubName"이어야합니다. 이 하위는 문자열에서 DocumentName을 가져 와서 해당 문서에 대한 Document 객체 핸들을 가져와야합니다. 그런 다음 해당 문서에서 ModuleName.SubName 부분과 함께 ExecuteLine을 수행해야합니다. 코드를 단계별로 실행하고 몇 가지 사항을 파악해야하지만, 일단 진행되는 일에 매달렸다면 의미가 있어야합니다.
VBA와 대화식으로 매크로를 실행하는 다른 방법이 확실하지 않습니다. 제 생각에는 exe와 COM addons가 툴바로이 문제가 없을 수도 있습니다 ...
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
고맙습니다. 이 대단한 설명을 위해서 !!! – minduser