I am trying to develop a macro for a publisher document. This macro will, when run, show a pop-up allowing the user to select one of three types of clients, and add different bullet points to a text box depending on which option was selected. I'm having two different problems which I suspect are coming from the same source. Problem number one is that I can't get the button on my User Form to run a different macro when the button is clicked. Problem two is that I've added my macros to one of the toolbars, and nothing happens when I click on them. In both cases, it's simply not running the macro. What am I doing wrong?
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
Why are you using Application.Run("ShapeTest")
rather than simply ShapeTest
?
I don't have enough information to be 100% sure, but the following should work: To make ShapeTest
callable from the userform you do two things:
1) Move it from ThisDocument
to a general code module (first Insert/Module
in the editor).
2) Eliminate the word Private
in front of Sub ShapeTest()
-- you don't want this to be a private sub since you want code outside of the module to be able to use it.
On edit: Alternatively -- you could keep ShapeTest()
where it is in ThisDocument
, get rid of the Private
qualifier and in the userform code refer to ShapeTest
as ThisDocument.ShapeTest
. I prefer using the first method since I tend to like to keep as much code as possible in general code modules (reserving things like ThisDocument
for event handlers) but OTOH my VBA experience is mostly Excel with a smattering of Word and there might be reasons to keep the code in ThisDocument
in Publisher. I don't know Publisher, but a problem that I have run into in Word at times is I have sometimes accidentally put code in the Normal
template that I wanted to go in the document's project. If something similar is possible in Publisher you should double check where your code is living.