Читать книгу Excel 2019 Power Programming with VBA - Michael Alexander, Dick Kusleika - Страница 169
CAUTION
ОглавлениеThe negation operator (a minus sign) is handled differently in VBA. In Excel, the following formula returns 25:
=-5^2
In VBA, x
equals –25 after this statement is executed.
x = -5 ^ 2
VBA performs the exponentiation operation first and then applies the negation operator. The following statement returns 25:
x = (-5) ^ 2
In the statement that follows, x
is assigned the value 10 because the multiplication operator has a higher precedence than the addition operator:
x = 4 + 3 * 2
To avoid ambiguity, you may prefer to write the statement as follows:
x = 4 + (3 * 2)
In addition, VBA provides a full set of logical operators, shown in Table 3.4. For complete details on these operators (including examples), use the VBA Help system.
TABLE 3.4 VBA Logical Operators
Operator | What It Does |
Not | Performs a logical negation on an expression |
And | Performs a logical conjunction on two expressions |
Or | Performs a logical disjunction on two expressions |
Xor | Performs a logical exclusion on two expressions |
Eqv | Performs a logical equivalence on two expressions |
Imp | Performs a logical implication on two expressions |
The following instruction uses the Not
operator to toggle the gridline display in the active window. The DisplayGridlines
property takes a value of either True
or False
. Therefore, using the Not
operator changes False
to True
and True
to False
.
ActiveWindow.DisplayGridlines = Not ActiveWindow.DisplayGridlines
The following expression performs a logical And
operation. The MsgBox
statement displays True
only when Sheet1
is the active sheet and the active cell is in Row 1
. If either or both of these conditions aren't true, the MsgBox
statement displays False
.
MsgBox ActiveSheet.Name = "Sheet1" And ActiveCell.Row = 1
The following expression performs a logical Or
operation. The MsgBox
statement displays True
when either Sheet1
or Sheet2
is the active sheet.
MsgBox ActiveSheet.Name = "Sheet1" Or ActiveSheet.Name = "Sheet2"