2010-03-08 5 views

Répondre

1

Tout dépend de ce que les macros font et comment vous souhaitez les appeler. Je vais supposer qu'ils sont simplement des macros qui vont exécuter quelque chose dans la page Visio active. Par défaut dans Visio VBA, tout sous-système public sans arguments est ajouté au menu Outils Visio-> Macros, dans un dossier nommé par le document contenant les macros (dans ce cas, les macros), puis séparé en dossiers par module prénom. Si vous êtes la seule personne à utiliser les macros, vous n'avez probablement pas besoin de faire autre chose.

Cependant, puisque vous les mettez dans un fichier vss, je suppose que vous souhaitez les distribuer à d'autres personnes.

Il y a quelque chose de drôle (et par drôle je veux dire irritant) sur Visio et comment les barres d'outils et les boutons fonctionnent, lorsqu'ils sont ajoutés par programmation. Malheureusement, lorsque vous créez une barre d'outils à l'aide des classes UIObject et Toolbar et ToolbarItem, Visio suppose que le code que vous appelez réside dans le dessin actif et ne peut pas être dans un gabarit. Je peux donc vous donner quelques conseils sur l'utilisation de ces classes, mais fondamentalement, il consiste à distribuer un modèle .vst avec vos fichiers .vss, avec juste un seul sous-requis dans le fichier .vst. Ainsi, au lieu d'utiliser une barre d'outils personnalisée, vous pouvez attacher du code aux masques de forme dans votre fichier .vss qui exécutent le code lorsqu'ils sont déposés sur un document de dessin (en utilisant CALLTHIS et l'événement EventDrop dans la feuille de calcul). Avec cette méthode, j'ai juste un sous qui est appelé en utilisant callthis qui prend un objet shape en argument, exécute du code, puis supprime la forme (si je ne le veux plus). Enfin, vous pouvez manipuler l'interface utilisateur de Visio par programmation pour ajouter une barre d'outils et des boutons pour vos macros. Voici quelques exemples de code, essentiellement la façon dont je le fais avec une solution que j'ai développée. Comme je l'ai mentionné ci-dessus, la partie la plus importante de l'utilisation de cette méthode est d'avoir un modèle de document (.vst) qui contient un sous (avec le code ci-dessous, il doit s'appeler RunStencilMacro) qui prend une chaîne comme argument. Cette chaîne doit être "DocumentName.ModuleName.SubName". Ce sous-élément doit retirer le DocumentName de la chaîne et obtenir un handle d'objet Document pour ce document. Ensuite, il doit exécuter ExecuteLine sur ce document avec la partie ModuleName.SubName. Vous devrez passer en revue le code et comprendre certaines choses, mais une fois que vous aurez compris ce qui se passe, cela devrait être logique.

Je ne suis pas sûr d'autres façons d'exécuter les macros de manière interactive avec VBA. Je pense que les addons COM et exe ne peuvent pas avoir ce problème avec les barres d'outils ...

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

MERCI BEAUCOUP. POUR CETTE GRANDE EXPLICATION !!! – minduser

Questions connexes