2010-03-08 5 views

답변

1

매크로는 매크로의 기능과 호출 방식에 따라 다릅니다. 나는 그들이 단순히 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 
+0

고맙습니다. 이 대단한 설명을 위해서 !!! – minduser