|< Day Day Up >|
You've seen quite a few variables so far in this book. Recall that a variable is a named part of VBA code that holds a single value (for example, a number or a string of characters). Or in the case of an array variable, the variable can store multiple related values. But so far you've been exposed to only one type of variable, which you might call a simple variable (sometimes you'll see the technical term scalar variable used for this type). There's actually a second type called object variables, or just objects. An object variable is a variable that also includes behavior. This concept is often tough for beginners to grasp, so this section starts by exploring an analogy that will help you understand how objects work.
Digressing into the Real World
To understand objects, you're going to look at a real-world object. Specifically, this section discusses the sort of toy radio-controlled car that has been popular with kids (and software developers!) for many years. Here are three key facts about a typical such car:
All that probably seems perfectly obvious, which was the point. If you keep these little cars in mind when learning about objects, it will help you sort out the key concepts.
An Object Example from Access
There are objects in VBA and in the applications that it manipulates, just like there are objects in the real world. For example, each Access form is actually an object. Here's how the analogy plays out:
Of course, analogies break down after a while, and there are some aspects of objects (such as events, which you learn about later in this chapter) that don't fit neatly into this particular analogy. But on the whole, if you start to feel confused about VBA objects, thinking about real objects might help.
Creating Objects in Code
Although you can create some objects (such as Access forms) through a user interface, most VBA objects are completely abstract and can only be created in code. Before you can do anything else with objects, you need to know how to create them. Here's an example of VBA code that creates a new object, in this case an instance of the Projects form in the sample database:
Sub CreateObject1() ' Create and display a form object Dim frm As Form_Projects Set frm = New Form_Projects frm.Visible = True MsgBox "Click OK to continue" End Sub
If you run this code, you'll discover that it creates an instance of the Projects form and displays it, along with a message box, as shown in Figure 8.1. When you click OK, both the message box and the form vanish.
Figure 8.1. Form object created with VBA code.
The code starts by declaring the object variable named frm. Rather than being a simple variable such as a string or an integer, this variable is declared to be of the Form_Projects type. For each form in your Access application, Access creates a matching class named Form_formname.
Remember, though, that the class is not itself an object. To actually use the object, you need to instantiate the class. That's what the second line of code (the Set statement) does. This line tells VBA to create a new instance of the Form_Projects class, and to use the frm variable to refer to that object in the future.
By default, new Access forms are hidden when they are created. The next line of code sets the Visible property of the form to True, so that it will be visible onscreen.
Next comes the MsgBox statement to generate the message box. Remember, when you create a message box, your code pauses until the user responds to the message.
After you click OK, you'll see the form vanish. That's because VBA destroys all the variables declared in a procedure at the end of the procedure. When the frm variable is destroyed in code, the corresponding form ceases to exist onscreen.
It is possible to declare variables slightly differently so that they are available outside of a single procedure. For details, see "Understanding Scope and Lifetime," p.131.
There's a second way to create an object that takes slightly less code:
Sub CreateObject2() ' Create and display a form object Dim frm As New Form_Projects frm.Visible = True MsgBox "Click OK to continue" End Sub
The line of code
Dim variablename As New classname
both declares and instantiates the variable in a single line.
When you declare and instantiate an object in a single statement, the object isn't actually created until the first time that you use the object variable in code. If you want to make it easy to tell when the object is created, use the two-statement format.
|< Day Day Up >|