Скачать книгу

ActiveSheet.Name

      If you want to know the name and directory path of the active workbook, use a statement like this:

      MsgBox ActiveWorkbook.FullName

      If a range on a worksheet is selected, you can fill the entire range with a value by executing a single statement. In the following example, the Selection property of the Application object returns a Range object that corresponds to the selected cells. The instruction simply modifies the Value property of this Range object, and the result is a range filled with a single value.

      Selection.Value = 12

      If something other than a range is selected (such as a ChartObject or a Shape), the preceding statement generates an error because ChartObject and Shape objects don't have a Value property.

      The following statement, however, enters a value of 12 into the Range object that was selected before a non-Range object was selected. If you look up the RangeSelection property in the Help system, you find that this property applies only to a Window object.

      ActiveWindow.RangeSelection.Value = 12

      To find out how many cells are selected in the active window, access the Count property. Here's an example:

      MsgBox ActiveWindow.RangeSelection.Count

      Understanding methods

      Methods are the actions that can be performed with an object. It helps to think of methods as verbs. You can paint your house, so in VBA, that translates to something like house.paint.

      A simple example of an Excel method is the Select method of the Range object.

      Range("A1").Select

      Another is the Copy method of the Range object.

      Range("A1").Copy

      More about arguments

      An issue that often leads to confusion among new VBA programmers concerns arguments. Some methods use arguments to clarify further the action to be taken, and some properties use arguments to specify additionally the property value. In some cases, one or more of the arguments are optional.

      Consider the Protect method for a workbook object. Check the Help system, and you'll find that the Protect method takes three arguments: Password, Structure, and Windows. These arguments correspond to the options in the Protect Structure and Windows dialog box.

      If you want to protect a workbook named MyBook.xlsx, for example, you might use a statement like this:

       Workbooks("MyBook.xlsx").Protect "xyzzy", True, False

      In this case, the workbook is protected with a password (argument 1). Its structure is protected (argument 2) but not its windows (argument 3).

      If you don't want to assign a password, you can use a statement like this:

       Workbooks("MyBook.xlsx").Protect , True, False

      The first argument is omitted, and we specified the placeholder by using a comma.

      You can make your code more readable by using named arguments. Here's an example of how you use named arguments for the preceding example:

       Workbooks("MyBook.xlsx").Protect Structure:=True, Windows:=False

      Using named arguments is a good idea, especially for methods that have many optional arguments and also when you need to use only a few of them. When you use named arguments, you don't need to use a placeholder for missing arguments.

      For properties (and methods) that return a value, you must use parentheses around the arguments. For example, the Address property of a Range object takes five optional arguments. Because the Address property returns a value, the following statement isn't valid because the parentheses are omitted:

       MsgBox Range("A1").Address False ' invalid

      The proper syntax for such a statement requires parentheses as follows:

       MsgBox Range("A1").Address(False)

      You can also write the statement using a named argument:

       MsgBox Range("A1").Address(RowAbsolute:=False)

      These nuances will become clearer as you gain more experience with VBA.

      Much of the work that you will do in VBA involves cells and ranges in worksheets. That being the case, let's take some time to use the Range object as a case study on how to explore and get familiar with a specific object.

      Finding the properties of the Range object

      Open the Visual Basic Editor and then go up to the menu and click Help ➪ Microsoft Visual Basic for Applications Help. You'll be taken to the Microsoft Developer Network (MSDN) website. While on MSDN, search for the word Range to see the page for the Range object. There you will discover that the Range object exposes three properties that can be used to manipulate your worksheets via VBA.

       The Range property of a Worksheet or Range class object

       The Cells property of a Worksheet object

       The Offset property of a Range object

      The Range property

      The Range property returns a Range object. If you consult the Help system for the Range property, you learn that this property has two syntaxes.

      object.Range(cell1) object.Range(cell1, cell2)

      The Range property applies to two types of objects: a Worksheet object or a Range object. Here, cell1 and cell2 refer to placeholders for terms that Excel recognizes as identifying the range (in the first instance) and delineating the range (in the second instance). The following are a few examples of using the Range property.

      You've already seen examples like the following one earlier in the chapter. The instruction that follows simply enters a value into the specified cell. In this case, it puts the value 12.3 into cell A1 on Sheet1 of the active workbook.

      Worksheets("Sheet1").Range("A1").Value = 12.3

      The Range property also recognizes defined names in workbooks. Therefore, if a cell is named Input, you can use the following statement to enter a value into that named cell:

      Worksheets("Sheet1").Range("Input").Value = 100

      The example that follows enters the same value in a range of 20 cells on the active sheet. If the active sheet isn't a worksheet, the statement causes an error message.

      ActiveSheet.Range("A1:B10").Value = 2

      The next example produces the same result as the preceding example:

      Range("A1", "B10") = 2

Скачать книгу