J'ai écrit quelques macros pour Visio. Maintenant, je les ai copiés dans un Stencil appelé Macros.vss Comment puis-je appeler mes macros maintenant?Comment appeler une macro visio à partir d'un stencil
Répondre
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
- 1. Comment appeler une macro VBA définie dans un fichier différent?
- 2. Comment ajouter une action à visio (2003)
- 3. Comment appeler une macro vba de C#
- 4. Appeler une macro C++ avec moins d'arguments
- 5. Comment forcer visio à ré-évaluer des formules lorsqu'un document visio non approuvé est ouvert
- 6. Quitter une macro Excel externe (à partir d'une interface graphique, pas de la macro)
- 7. Appeler une URL à partir de javascript
- 8. Pochoirs Visio pour MS SQL Server
- 9. Stencil Buffer lecture/écriture masque
- 10. Comment appeler C# à partir de C++
- 11. Comment appeler une DLL .NET à partir d'un processus Win32?
- 12. Comment appeler une fonction javascript à partir d'une servlet?
- 13. Comment puis-je appeler une DLL C++ à partir VS2008
- 14. Comment appeler une application shell à partir de SQL storedprocedure?
- 15. Comment appeler une bibliothèque C à partir de .NET
- 16. Comment appeler une méthode RemoteObject à partir d'ActionScript?
- 17. Comment appeler une applet à partir d'un autre fichier Java?
- 18. Comment appeler une fonction JavaScript à partir du code C#
- 19. Comment appeler une fonction à partir de données binaires
- 20. Comment appeler une méthode IronPython 2 à partir de C#
- 21. comment appeler une fonction java à partir de javascript?
- 22. Comment appeler une procédure étendue à partir d'une fonction
- 23. Comment appeler une servlet à partir de la page JSP?
- 24. Comment appeler une méthode à partir d'un module personnalisé?
- 25. Comment appeler une application C# windows à partir d'un contrôle?
- 26. Comment appeler une fonction C# à partir d'un bouton?
- 27. Comment appeler une méthode de contrôleur à partir de JQuery?
- 28. Comment puis-je appeler une fonction à partir d'une DLL?
- 29. Comment appeler une méthode à partir d'une instance d'une classe?
- 30. Comment appeler une méthode IBAction à partir d'une autre méthode
MERCI BEAUCOUP. POUR CETTE GRANDE EXPLICATION !!! – minduser