Cum se compară lucrurile în VBA?

La compararea lucrurilor din VBA se folosesc operatori de comparație care specifică tipul de comparare dorit: dacă o variabilă este egală, mai mare sau mai mică decât alta etc.

VBA suportă operatorii de comparație prezentați în tabelul următor:

Primii șase operatori de comparare sunt simpli. Expresiile numerice sunt evaluate ca și numere. Expresiile alfanumerice sunt evaluate în ordine alfabetică: de exemplu, dacă ax este înainte de handle în ordine alfabetică, este considerat mai mic decât ("less than") handle.

Deci, "ax" < "handle" va fi evaluat ca adevărat - True. Iar rezultatul evaluării (True sau False) determină ce se petrece mai departe în blocul If...Then. (Altfel zis, codul din secțiunea Then este executat când ceva este adevărat - True. Și nu este executat dacă ceva este fals - False. Ca exemplul de fiecare zi: Dacă (If) plouă, atunci (Then) se ia umbrela. În caz contrar (Else), nu se ia.)

Expresiile compuse (numere și litere) sunt evaluate în ordine alfabetică: Office 97 este mai mare decât ("greater than") Office 2016 pentru că 9 este mai mare decât 2.

Is, al șaptelea operator de comparare, este mai puțin familiar și rar folosit. Se folosește pentru a compara variabilele obiect și a stabili dacă cele două variabile obiect reprezintă același obiect (un obiect care are atribuit un nume, nu unul cum ar fi document sau domeniu - range).

De exemplu, următoarele instrucțiuni declară două obiecte - objTest1 și objTest2 - și atribuie fiecărui element ActiveDocument.Paragraphs(1).Range, un interval care constă din primul paragraf din documentul activ din Word. Următoarea instrucțiune compară cele două obiecte și returnează False în caseta de mesaj pentru că cele două obiecte sunt diferite, chiar dacă conținutul lor este același:

Dim objTest1 As Object
Dim objTest2 As Object
Set objTest1 = ActiveDocument.Paragraphs(1).Range
Set objTest2 = ActiveDocument.Paragraphs(1).Range
'urmatoarea instructiune returneaza False pentru ca obiectele sunt diferite
MsgBox objTest1 Is objTest2

Însă dacă ambele variabile de obiect se referă la același obiect, comparația Is returnează True, ca în exemplul următor în care ambele objTest1 și objTest2 se referă la variabila obiect objTest3:

Dim objTest1 As Object 
Dim objTest2 As Object 
Dim objTest3 As Object
Set objTest3 = ActiveDocument.Paragraphs(1).Range
Set objTest1 = objTest3
Set objTest2 = objTest3
'urmatoarea instructiune returneaza True pentru ca
'objTest1 si objTest2 se refera la acelasi obiect
MsgBox objTest1 Is objTest2

De reținut că atunci când se folosește Is, nu se compară conținutul variabilelor obiect, ci obiectul la care se referă comparația.