Salta ai contenuti

Riferimento della sintassi del VBA Compiler

Questo documento fornisce un riferimento per la sintassi VBA supportata dal VBA compiler di XLS Padlock.

La struttura di uno script è costituita da dichiarazioni di funzioni e di routine (sub).

SUB DoSomething
CallSomething
END SUB
FUNCTION MyFunction
MyFunction = "Ok!"
END FUNCTION

Le istruzioni su una stessa riga possono essere separate dal carattere :.


È possibile inserire commenti all’interno di uno script. Si può usare il carattere ' oppure REM. Il commento si estende fino alla fine della riga.

' This is a comment before ShowMessage
ShowMessage("Ok")
REM This is another comment
ShowMessage("More ok!")

I nomi degli identificatori (variabili, funzioni, procedure, ecc.) devono iniziare con un carattere (a-z, A-Z) o con un trattino basso _. Possono essere seguiti da caratteri alfanumerici o da trattini bassi. I nomi non possono contenere altri caratteri né spazi.


Non è necessario dichiarare le variabili in uno script, ma se lo si desidera è possibile dichiarare una variabile mediante la direttiva DIM.

SUB Msg(Param1)
DIM S
S = "Hello world!"
ShowMessage(S)
END SUB

È inoltre possibile dichiarare variabili globali come PRIVATE o PUBLIC.

PRIVATE A
PUBLIC B
B = 0
A = B + 1
ShowMessage(A)

Le variabili dichiarate con DIM sono pubbliche per impostazione predefinita. Le variabili private non sono accessibili da altri script. Le variabili possono anche essere inizializzate al momento della dichiarazione:

DIM A = "Hello world"
DIM B As Integer = 5

Le istruzioni di assegnazione utilizzano l’operatore = per assegnare un valore o il risultato di un’espressione a una variabile o a una proprietà di un oggetto.

MyVar = 2
Application.Range("C4").Value = "This " + "is ok."

Il compilatore offre un supporto di base per i costruttori di array e per gli array variant. Per costruire un array, utilizzare i caratteri [ e ]. È possibile costruire un array a più indici annidando i costruttori di array.

Nel compilatore, gli array hanno indice a base 0.

NewArray = [ 2,4,6,8 ]
Num = NewArray[1] 'Num receives 4
MultiArray = [ ["green","red","blue"] , ["apple","orange","lemon"] ]
Str = MultiArray[0,2] 'Str receives "blue"
MultiArray[1,1] = "new orange"

Array dinamici:

' Create a dynamic array
DIM PTIM = VarArrayCreate([0,3000,0,5], 12)
' Assign a value:
PTIM[1,2] = 1530

Le stringhe, gli array e le proprietà di tipo array possono essere indicizzati mediante i caratteri [ e ]. Per esempio, se Str è una variabile di tipo stringa, l’espressione Str[3] restituisce il terzo carattere della stringa.

MyChar = MyStr[2]
MyStr[1] = "A"
MyArray[1,2] = 1530

La sintassi Basic supporta:

  • Dichiarazioni: SUB...END SUB, FUNCTION...END FUNCTION
  • Direttive: BYREF, DIM
  • Condizionali: IF...THEN...ELSE...ELSEIF...END IF, SELECT CASE...END SELECT
  • Cicli: FOR...TO...STEP...NEXT, DO...WHILE...LOOP, DO...LOOP...WHILE, DO...UNTIL...LOOP, DO...LOOP...UNTIL
  • Operatori: ^, *, /, AND, +, -, OR, <>, >=, <=, =, >, <, DIV, MOD, XOR, SHL, SHR
  • Gestione degli errori: TRY...EXCEPT, TRY...FINALLY
  • Altro: EXIT, costruttori di array [1, 2, 3], accesso agli oggetti ObjectName.Property

Esistono due forme: IF...THEN...END IF e IF...THEN...ELSE...END IF. Se l’espressione è vera, vengono eseguite le istruzioni THEN. Se è falsa, vengono eseguite le istruzioni ELSE (se presenti).

IF J <> 0 THEN
Result = I/J
END IF
IF J = 0 THEN
Exit
ELSE
Result = I/J
END IF

Se l’istruzione si trova su una singola riga, non è necessario END IF:

IF J <> 0 THEN Result = I/J

Se selectorExpression corrisponde a una delle espressioni caseexpr, vengono eseguite le rispettive istruzioni. In caso contrario, viene eseguita l’istruzione CASE ELSE.

SELECT CASE uppercase(Fruit)
CASE "lime"
ShowMessage("green")
CASE "orange"
ShowMessage("orange")
CASE ELSE
ShowMessage("black")
END SELECT

L’istruzione FOR ripete l’esecuzione di istruzioni finché un contatore non raggiunge un valore finale.

FOR counter = initialValue TO finalValue STEP stepValue
Statements
NEXT

La parte STEP è facoltativa; se omessa, il valore del passo è 1.

FOR c = 1 TO 10 STEP 2
a = a + c
NEXT

Un’istruzione WHILE ripete delle istruzioni finché una condizione di controllo è vera. La condizione viene valutata prima dell’esecuzione delle istruzioni.

WHILE (Data[I] <> X)
I = I + 1
END WHILE

Le istruzioni vengono eseguite WHILE (finché) un’espressione è vera, oppure UNTIL (fino a quando) un’espressione diventa vera. La condizione può essere verificata prima o dopo l’iterazione.

' Condition tested after
DO
K = I mod J
I = J
J = K
LOOP UNTIL J = 0
' Condition tested before
DO WHILE I < 0
...
LOOP

Le dichiarazioni sono simili al Basic standard. Per restituire un valore da una funzione, assegnarlo alla variabile implicita avente lo stesso nome della funzione, oppure utilizzare l’istruzione Return. I parametri possono essere passati per riferimento mediante la direttiva BYREF.

SUB HelloWord
ShowMessage("Hello world!")
END SUB
FUNCTION Max(A,B)
IF A > B THEN
MAX = A
ELSE
MAX = B
END IF
END FUNCTION
SUB SwapValues(BYREF A, B)
DIM TEMP
TEMP = A
A = B
B = TEMP
END SUB

Le routine (sub) e le funzioni sono pubbliche per impostazione predefinita, ma possono essere dichiarate come PRIVATE.