Home > Articles > Programming > Windows Programming

  • Print
  • + Share This
This chapter is from the book

Storing User Input in a Variable

Your VBA programs will usually be self-contained and run just fine on their own. However, you'll likely come across situations where you'll require some kind of custom input. For example, you might have a procedure that adjusts various aspects of a Word document. You could insert the name and location of a Word document into the procedure (this is called hard-coding the data), but that's not very flexible if your procedure is capable of working with different documents. A better idea is to have your procedure prompt for the name and location of a document. Your procedure could then take that data and use it to work on the specified document.

Whatever type of input you ask for, the result needs to be stored in a variable so that the rest of your procedure can access it. The next couple of sections take you through some VBA techniques that enable you to prompt for data and then store that data in a variable.

Getting Input Using MsgBox

You've seen a couple of times already in this book that you can display information by using the MsgBox function. This is a very useful function, so let's take a closer look at it. Here is the full syntax of this function:

MsgBox(Prompt[, Buttons][, Title][, HelpFile][, Context])

Prompt

The message you want to display in the dialog box. (You can enter a string up to 1,024 characters long.)

Buttons

A number or constant that specifies, among other things, the command buttons that appear in the dialog box. (See the next section.) The default value is 0.

Title

The text that appears in the dialog box title bar. If you omit the title, VBA uses the name of the current program (for example, Microsoft Excel).

HelpFile

The text that specifies the Help file that contains the custom help topic. (I don't discuss custom help topics in this book.) If you enter HelpFile, you also have to include Context. If you include HelpFile, a Help button appears in the dialog box.

Context

A number that identifies the help topic in HelpFile.

For example, the following statement displays the message dialog box shown in Figure 3.2:

MsgBox "You must enter a number between 1 and 100!",,"Warning"
Figure 3.2

Figure 3.2 A simple message dialog box produced by the MsgBox function.

Setting the Style of the Message

The default message dialog box displays only an OK button. You can include other buttons and icons in the dialog box by using different values for the Buttons parameter. Table 3.2 lists the available options.

Table 3.2. The MsgBox Buttons Parameter Options

Constant

Value

Description

Buttons

vbOKOnly

0

Displays only an OK button. (This is the default.)

vbOKCancel

1

Displays the OK and Cancel buttons.

vbAbortRetryIgnore

2

Displays the Abort, Retry, and Ignore buttons.

vbYesNoCancel

3

Displays the Yes, No, and Cancel buttons.

vbYesNo

4

Displays the Yes and No buttons.

vbRetryCancel

5

Displays the Retry and Cancel buttons.

Icons

vbCritical

16

Displays the Critical Message icon.

vbQuestion

32

Displays the Warning Query icon.

vbExclamation

48

Displays the Warning Message icon.

vbInformation

64

Displays the Information Message icon.

Default Button

vbDefaultButton1

0

The first button is the default (that is, the button selected when the user presses Enter).

vbDefaultButton2

256

The second button is the default.

vbDefaultButton3

512

The third button is the default.

Modality

vbApplicationModal

0

The user must respond to the message box before continuing work in the current application.

vbSystemModal

4096

All applications are suspended until the user responds to the message box.

You derive the Buttons argument in one of two ways:

  • By adding up the values for each option. For example, if you want the OK and Cancel buttons (value 1) and the Warning Message icon (value 48), then you specify the value 49.
  • By using the VBA constants separated by plus signs (+). This is the better way to go because it makes your code much easier to read.

For example, Listing 3.3 shows a procedure named ButtonTest, and Figure 3.3 shows the resulting dialog box. Here, three variables—msgPrompt, msgButtons, and msgTitle—store the values for the MsgBox function's Prompt, Buttons, and Title arguments, respectively. In particular, the following statement derives the Buttons argument:

msgButtons = vbYesNo + vbQuestion + vbDefaultButton2
Figure 3.3

Figure 3.3 The dialog box that's displayed when you run the code in Listing 3.3.

You also could derive the Buttons argument by adding up the values that these constants represent (4, 32, and 256, respectively), but the procedure becomes less readable that way.

Listing 3.3. A Procedure That Creates a Message Dialog Box

Sub ButtonTest()

    Dim msgPrompt As String, msgTitle As String
    Dim msgButtons As Integer, msgResult As Integer

    msgPrompt = "Are you sure you want to display " & vbCrLf & _
                "the worksheet names?"
    msgButtons = vbYesNo + vbQuestion + vbDefaultButton2
    msgTitle = "Display Worksheet Names"

    msgResult = MsgBox(msgPrompt, msgButtons, msgTitle)

End Sub

Getting Return Values from the Message Dialog Box

A message dialog box that displays only an OK button is straightforward. The user either clicks OK or presses Enter to remove the dialog from the screen. The multibutton styles are a little different, however; the user has a choice of buttons to select, and your procedure should have a way to find out which button the user chose.

You do this by storing the MsgBox function's return value in a variable. Table 3.3 lists the seven possible return values.

Table 3.3. The MsgBox Function's Return Values

Constant

Value

Button Selected

vbOK

1

OK

vbCancel

2

Cancel

vbAbort

3

Abort

vbRetry

4

Retry

vbIgnore

5

Ignore

vbYes

6

Yes

vbNo

7

No

To process the return value, you test the value in the variable and have your procedure take appropriate action. You learn how to do this in Chapter 6. Listing 3.4 shows a revised version of ButtonTest that uses an If statement to see whether the msgResult value equals vbYes. If so, it means the user clicked Yes in the dialog box, so the procedure runs the StoreWorksheetNames procedure (see Listing 3.4); otherwise, it does nothing.

To learn about the If statement, see "Using If...Then to Make True/False Decisions," p. 92.

For MsgBox functions that use three buttons, you need to use the Select Case statement to process the result; see "Using the Select Case Statement," p. 97.

Listing 3.4. A Procedure that Handles the Return Value of the MsgBox Function

Sub ButtonTest2()

    Dim msgPrompt As String, msgTitle As String
    Dim msgButtons As Integer, msgResult As Integer

    msgPrompt = "Are you sure you want to display " & vbCrLf & _
                "the worksheet names?"
    msgButtons = vbYesNo + vbQuestion + vbDefaultButton2
    msgTitle = "Display Worksheet Names"

    msgResult = MsgBox(msgPrompt, msgButtons, msgTitle)

    If msgResult = vbYes Then
        StoreWorksheetNames
    End If

End Sub

Getting Input Using InputBox

As you've seen, the MsgBox function lets your procedures interact with the user and get some feedback. Unfortunately, this method limits you to simple command-button responses. For more varied user input, you need to use a more sophisticated technique. The rest of this chapter shows you just such a method: prompting the user for input using the InputBox function.

The InputBox function displays a dialog box with a message that prompts the user to enter data, and it provides a text box for the data itself. Here's the syntax for this function:

InputBox(Prompt[, Title][, Default][, Xpos][, Ypos][, HelpFile][, Context])

Prompt

The message you want to display in the dialog box (1,024-character maximum).

Title

The text that appears in the dialog box title bar. The default value is the null string (nothing).

Default

The default value displayed in the text box. If you omit Default, the text box is displayed empty.

Xpos

The horizontal position of the dialog box from the left edge of the screen. The value is measured in points (there are 72 points in an inch). If you omit Xpos, the dialog box is centered horizontally.

Ypos

The vertical position, in points, from the top of the screen. If you omit Ypos, the dialog is centered vertically in the current window.

HelpFile

The text specifying the Help file that contains the custom help topic. (Again, I don't cover Help files in this book.) If you enter HelpFile, you also have to include Context. If you include HelpFile, a Help button appears in the dialog box.

Context

A number that identifies the help topic in HelpFile.

For example, Listing 3.5 shows a procedure called InputBoxText that uses the InputBox method to prompt the user for data. Figure 3.4 shows the dialog box that appears. The result is stored in the inputData variable. If the user didn't enter data, the function returns nothing, which is represented in VBA by the string value "" (this is called the null string). The procedure uses the If statement to check whether the value stored in inputData is "" and, if it's not, it runs MsgBox to display the entered data.

Figure 3.4

Figure 3.4 A dialog box generated by the InputBox function in Listing 3.5.

Listing 3.5. A Procedure That Prompts the User for Input and Then Displays the Data

Sub InputBoxTest()
    Dim inputData As String
    '
    ' Get the data
    '
    inputData = InputBox("Enter some text:", "Input Box Text")
    '
    ' Check to see if any data was entered
    '
    If inputData <> "" Then
        '
        ' If so, display it
        '
        MsgBox inputData
    End If
End Sub

From Here

  • You often use operators and expressions to assign values to variables. I discuss this in detail in Chapter 4, "Building VBA Expressions."
  • Objects have a separate variable type. I talk about it, as well as about assigning objects to variables, in Chapter 5, "Working with Objects."
  • To learn about the If statement for processing MsgBox and InputBox results, see "Using If...Then to Make True/False Decisions," p. 92.
  • For MsgBox functions that use three buttons, you need to use the Select Case statement to process the result; see "Using the Select Case Statement," p. 97.
  • + Share This
  • 🔖 Save To Your Account