2015-07-29 2 views
0

Je tente de développer une macro pour un document d'éditeur. Cette macro, lorsqu'elle est exécutée, affiche une fenêtre contextuelle permettant à l'utilisateur de sélectionner l'un des trois types de clients et d'ajouter des points différents à une zone de texte en fonction de l'option sélectionnée. J'ai deux problèmes différents que je soupçonne provenir de la même source. Le problème numéro un est que je ne peux pas obtenir le bouton sur mon formulaire utilisateur pour exécuter une macro différente lorsque le bouton est cliqué. Le deuxième problème est que j'ai ajouté mes macros à l'une des barres d'outils, et rien ne se passe lorsque je clique dessus. Dans les deux cas, il ne fonctionne tout simplement pas avec la macro. Qu'est-ce que je fais mal?Exécution de macros à partir de la barre d'outils/Exécution d'une macro à partir d'une autre

UserForm1

Private Sub CommandButton1_Click() 
Application.Run ("ShapeTest") 
End Sub 

Private Sub UserForm_Initialize() 
With ListBox1 
.AddItem ("Federal") 
.AddItem ("State") 
.AddItem ("Local") 
End With 
End Sub 

ThisDocument

Private Sub GenerateStatement() 
UserForm1.Show 
End Sub 

Private Sub ShapeTest() 
MsgBox ("Hello!") 
Application.ActiveDocument.Pages(1).Shapes(1).TextFrame.TextRange.InsertAfter`enter code here`(Chr(13) & "My Text") 
End Sub 

Répondre

1

Pourquoi utilisez-vous Application.Run("ShapeTest") plutôt que de simplement ShapeTest?

Je n'ai pas suffisamment d'informations pour être sûr à 100%, mais ce qui suit devrait fonctionner: Pour ShapeTest appelable de la formUtilisateur faire deux choses:

1) le déplacer de ThisDocument à un module de code général (premier Insert/Module dans l'éditeur).

2) Éliminer le mot Private devant Sub ShapeTest() - vous ne voulez cela un sous privé puisque vous voulez un code extérieur du module pour pouvoir l'utiliser.

Sur modifier: Sinon - vous pouvez garder ShapeTest() où il est ThisDocument, se débarrasser du qualificatif Private et dans le code formUtilisateur se réfèrent à ShapeTest comme ThisDocument.ShapeTest. Je préfère utiliser la première méthode car j'ai tendance à conserver autant de code que possible dans les modules de code général (en réservant des choses comme ThisDocument pour les gestionnaires d'événements) mais OTOH mon expérience VBA est surtout Excel avec une poignée de Word et il pourrait y avoir des raisons Gardez le code dans ThisDocument dans Publisher. Je ne sais pas Publisher, mais un problème que j'ai rencontré dans Word est parfois que j'ai parfois accidentellement mis du code dans le modèle Normal que je voulais aller dans le projet du document. Si quelque chose de similaire est possible dans Publisher, vous devez vérifier où votre code est vivant.