View Single Post
  #16   Report Post  
Posted to microsoft.public.word.docmanagement
Graham Mayor Graham Mayor is offline
external usenet poster
 
Posts: 19,312
Default A Macro that calls another Macro

While I would prefer a user form, you can still do this with an input box.
The following will do more or less what you asked - in that it will allow
the user to enter a series of names which are entered at the cursor. The
list of names is stored in a variable sDef, which you could use elsewhere,
but for the moment the variable is not used.

Sub Defendant()
Dim sName As String
Dim sDef As String
Dim Count As Long
Count = 1
sDef = ""
Do
sName = InputBox("Enter the name of Defendant " & _
Count, "Defendant " & Count)
If sName = "" Then GoTo NoMoreNames:
If Count 1 Then
sName = Chr(44) & Chr(32) & sName
End If
Selection.TypeText sName
Count = Count + 1
sDef = sDef & sName
Loop
Exit Sub
NoMoreNames:
'MsgBox sDef
If Count 1 Then Selection.TypeText " "
End Sub

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org




Trefilov22 wrote:
I took a look at both sites, but haven't had any luck finding
anything in regards to this. It seems like in theory it would be
something that isn't too difficult to do, I just know nothing about
VBA to figure out how to program it to do so.

Basically what you are saying is that I would make a form that asks
for a Name or whatever I am looking for, and so long as there is an
entry, it drops that name into the document, and then asks for
another name. If it ends up being blank, at that point it stops the
process (at least thats how its done in WP 10).

I can see where you all have to work your tails off to learn all of
this stuff to become MVPs. Luckily once I get this last problem
sorted out I can wash my hands of these macros. All the others are
working correctly. I just have this issue in multiple forms.

Any other suggestions on where I can search?

Brian

"Graham Mayor" wrote:

You could do it with vba and a userform to ask the question and
paste the result into the document and do this repeatedly until you
tell it to stop. Userform coding does not lend itself readily to
reproduction in a newsgroup forum, but see Word MVP FAQ - Userforms
http://word.mvps.org/FAQs/Userforms.htm to get you started. You will
find lots of interesting userform examples on fellow MVP Greg
Maxey's web site http://gregmaxey.mvps.org/word_tips.htm

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org


Trefilov22 wrote:
Howdy Graham, you were so much help with my other question, I have a
new one for you. This is something that is possible within
WordPerfect 10, but am not sure if its possible in Word 2007. I
have a template, and a user has to enter names of people, but for
any given time, there may be 5 names, or there may be 2 names. In
WP, I can have it continuously ask for a name, until you leave the
field blank and hit enter, then it continues onto the next entry
(like date or whatever). Is there a way to have Word 07 ask the
same question (in this instance "Defendant's Name") until you leave
the field blank? We don't know from case to case how many
defendants there will be.

Thanks in advance!

"Graham Mayor" wrote:

You are welcome

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org


Trefilov22 wrote:
Graham,

If I am ever in your neck of the woods, I definately owe you a
beer! This worked! I really appreciate your help with all of
this. I never would have been able to figure that out.

Brian

"Graham Mayor" wrote:

In that case, leave the entries in normal.dot and use the
following, which, if the entries are named as you describe and in
normal.dot, should work as it stands.

Sub ChooseSig()
Dim iUser As Integer
Dim sType As String
On Error GoTo UserCancelled:
iUser = InputBox("For Bethany, enter 1" & vbCr & _
"For Heather, enter 2" & vbCr & _
"For Jim, enter 3" & vbCr & _
"For Kathy Hutchens, enter 4" & vbCr & _
"For Kathy McCallister, enter 5" & vbCr & _
"For Kelli, enter 6" & vbCr & _
"For Krista, enter 7" & vbCr & _
"For Rhonda, enter 8" & vbCr & _
"For Thala, enter 9", "Select signature", 1)
Select Case iUser
Case 1
NormalTemplate.AutoTextEntries("Bethany").Insert _
Whe=Selection.Range, RichText:=True
Case 2
NormalTemplate.AutoTextEntries("Heather").Insert _
Whe=Selection.Range, RichText:=True
Case 3
NormalTemplate.AutoTextEntries("Jim").Insert _
Whe=Selection.Range, RichText:=True
Case 4
NormalTemplate.AutoTextEntries("Kathy Hutchens").Insert _
Whe=Selection.Range, RichText:=True
Case 5
NormalTemplate.AutoTextEntries("Kathy McCallister").Insert _
Whe=Selection.Range, RichText:=True
Case 6
NormalTemplate.AutoTextEntries("Kelli").Insert _
Whe=Selection.Range, RichText:=True
Case 7
NormalTemplate.AutoTextEntries("Krista").Insert _
Whe=Selection.Range, RichText:=True
Case 8
NormalTemplate.AutoTextEntries("Rhonda").Insert _
Whe=Selection.Range, RichText:=True
Case 9
NormalTemplate.AutoTextEntries("Thala").Insert _
Whe=Selection.Range, RichText:=True
Case Else
MsgBox "You have entered a number that is not in the list", _
vbInformation, "Error"
End Select
Exit Sub
UserCancelled:
MsgBox "User Cancelled", vbInformation, "Error"
End Sub


--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org


Trefilov22 wrote:
I'm not sure what a case statement name is. The first autotext
entry I have is named Bethany and its saved in the normal.dotm
Should I move this to the building blocks.dotx? here are the
names of the autotext entries:

Bethany
Heather
Jim
Kathy Hutchens
Kathy McCallister
Kelli
Krista
Rhonda
Thala

All are in the normal.dotm


"Graham Mayor" wrote:

I guess you are using the case statement version to retain your
autotext names? Rather than the macro posted below?
In this case put the names of your autotexts in quotes between
the brackets in place of "Sig" & iUser
Note that this will require you to ensure that your autotexts
are actually saved in normal.dot (you can move them with the
building block organiser) It makes for a lot less code if you
simple recreate your signatures with the names Sig1, Sig2 etc
(insert and resave) and use the shorter macro below. Then all
you have to do is change the names in the message box to match
the signature numbers.

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org



Trefilov22 wrote:
Now this line:

'change the following line
NormalTemplate.BuildingBlockEntries("Sig" & iUser).Insert _
Whe=Selection.Range, RichText:=True
'end of change

is entered multiple times, changing the "Sig" to read whatever
the name of the autotext entry is? Then I put in the second,
and third, etc.

"Graham Mayor" wrote:

Word 2007 has the building blocks organizer which you can add
to the QAT and pick the autotexts (the signature blocks)
from a list. The macro I posted will simply insert the right
signature blocks *in any document* - provided they are named
correctly. However it will not work as it stands in Word 2007
as autotext entries work in a slightly different way there to
earlier versions. If we take the second example - it needs
the following change.

Sub ChooseSig()
Dim iUser As Integer
Dim sType As String
iUser = InputBox("For John, enter 1" & vbCr & _
"For Fred, enter 2" & vbCr & _
"For Bill, enter 3" & vbCr & _
"For Susan, enter 4" & vbCr & _
"For Joan, enter 5" & vbCr & _
"For Alan, enter 6" & vbCr & _
"For Keith, enter 7" & vbCr & _
"For Elsie, enter 8" & vbCr & _
"For John, enter 9","Insert Signatures", 1)
'change the following line
NormalTemplate.BuildingBlockEntries("Sig" &
iUser).Insert _ Whe=Selection.Range,
RichText:=True 'end of change
End Sub

See http://www.gmayor.com/installing_macro.htm

and the signature autotexts need to be saved as autotexts in
the normal template. If you are unsure how to do that it is
illustrated at http://www.gmayor.com/Macrobutton.htm


--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org




Trefilov22 wrote:
That would be fine if it were within a Form. This is just
in general documents. Basically they'll type up something
and then run this macro and then choose who they are (it
would be easier if I could just assign their own signature
macro to them on their own PC, but occassionally they type
up something for someone else and would need to use their
signature).

In WordPerfect 10 they use a keystroke (ctrl-shft-M) and it
brings up a box with all of their names listed, then they
just click the name they want, and bam, in goes the
signature. I would like to do something similiar, if not
the same in Word 2007.

Thanks Graham for your response, I appreciate it!

Brian

"Graham Mayor" wrote:

I take it that this is Word prior to 2007?

A userform would bemore elegant, but you can create a
simple macro that would allow you to enter a single number
to insert the appropriate autotext. eg

Sub ChooseSig()
Dim iUser As Integer
Dim sType As String
iUser = InputBox("For John, enter 1" & vbCr & _
"For Fred, enter 2" & vbCr & _
"For Bill, enter 3" & vbCr & _
"For Susan, enter 4" & vbCr & _
"For Joan, enter 5" & vbCr & _
"For Alan, enter 6" & vbCr & _
"For Keith, enter 7" & vbCr & _
"For Elsie, enter 8" & vbCr & _
"For John, enter 9", , 1)
Select Case iUser
Case 1
NormalTemplate.AutoTextEntries("John's Sig").Insert _
Whe=Selection.Range, RichText:=True
Case 2
NormalTemplate.AutoTextEntries("Fred's Sig").Insert _
Whe=Selection.Range, RichText:=True
'etc
End Select
End Sub

Add the rest of the Case statements and change the names
and autotext names as appropriate.

You can make this much simpler and do away with the Case
statements if you re-name the autotexts to match the
numbers eg

Sig1 for John, Sig2 for Fred etc.

Then

Sub ChooseSig()
Dim iUser As Integer
Dim sType As String
iUser = InputBox("For John, enter 1" & vbCr & _
"For Fred, enter 2" & vbCr & _
"For Bill, enter 3" & vbCr & _
"For Susan, enter 4" & vbCr & _
"For Joan, enter 5" & vbCr & _
"For Alan, enter 6" & vbCr & _
"For Keith, enter 7" & vbCr & _
"For Elsie, enter 8" & vbCr & _
"For John, enter 9", , 1)
NormalTemplate.AutoTextEntries("Sig" & iUser).Insert _
Whe=Selection.Range, RichText:=True
End Sub

It wouldn't be too much of a stretch to enable each user to
have his own signature as default, but this should keep you
going for a bit http://www.gmayor.com/installing_macro.htm


--