When you type the same code multiple times, consider reusing your code instead of recreating it over and over. To do this, place the code in a separate procedure and call that procedure whenever you need it.
Here, we’ll look at doing just that and how to pass values to the procedure as you call it.
Create the Solution
Start with an empty Word document and, in the Visual Basic Editor, choose Insert > UserForm. Add three labels, two textboxes, two SpinButtons and two CommandButtons.
Arrange the first label, textbox and SpinButton side by side and then the second set. Set both textboxes’ Enabled property to False and their Value to 1. Add captions to the labels using the image as a guide.
Set the Commandbutton1 caption to “Make Document” and the CommandButton2 caption to “Quit” and its Cancel property to “True”.
Set both SpinButton Min properties to 1 and Max to 10. Double click CommandButton1 and type this:
Dim numheads, numsentences, i As Integer
On Error Resume Next
numheads = TextBox1.Text
numsentences = TextBox2.Text
For i = 1 To numheads
Call textline(1, True)
Call textline(numsentences, False)
Double click Quit and type this:
Double click SpinButton1 and type this:
TextBox1.Text = SpinButton1.Value
Double click SpinButton2 and type this:
TextBox2.Text = SpinButton2.Value
Type this into the UserForm1 code dialog:
Sub textline(lines As Variant, headvalue As Boolean)
Dim mytext As String
mytext = “The quick brown fox jumps over the lazy dog. “
For i = 1 To lines
If headvalue Then
Selection.Style = ActiveDocument.Styles(“Heading 1”)
Choose Insert > Module, add this code and save the file as a .docm document.
How it works
The arguments are a number and a Boolean variable (true/false) and they allow the one procedure to respond differently depending on the values in the variables passed to it.
The arguments have to be in the same order in the calling statement and in the procedure declaration but they don’t have to have the same name. The variable types have to match or at least be compatible.
Calling a procedure and passing values to it is a great way to use one piece of code in multiple ways.
Once the called procedure has finished execution, control is handed back to the calling procedure, which then continues to execute.