Ir al contenido

Referencia de sintaxis del VBA Compiler

Este documento ofrece una referencia de la sintaxis VBA admitida por el compilador VBA de XLS Padlock.

La estructura del script se compone de declaraciones de funciones y subs.

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

Las instrucciones en una sola línea se pueden separar con el carácter :.


Se pueden insertar comentarios dentro de un script. Puede usar el carácter ' o REM. El comentario se extiende hasta el final de la línea.

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

Los nombres de identificadores (variables, funciones, procedimientos, etc.) deben empezar por un carácter (a-z, A-Z) o un guion bajo _. Pueden ir seguidos de caracteres alfanuméricos o guiones bajos. Los nombres no pueden contener ningún otro carácter ni espacios.


No es necesario declarar variables en un script, pero si lo desea, puede declarar una variable mediante la directiva DIM.

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

También puede declarar variables globales como PRIVATE o PUBLIC.

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

Las variables declaradas con DIM son públicas de forma predeterminada. Las variables privadas no son accesibles desde otros scripts. Las variables también se pueden inicializar al declararlas:

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

Las instrucciones de asignación utilizan el operador = para asignar un valor o el resultado de una expresión a una variable o a una propiedad de objeto.

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

El compilador ofrece compatibilidad básica con constructores de matrices y matrices de tipo variante. Para construir una matriz, use los caracteres [ y ]. Puede construir una matriz de varios índices anidando constructores de matrices.

Las matrices del compilador tienen índice de 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"

Matrices dinámicas:

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

Las cadenas, las matrices y las propiedades de matriz se pueden indexar mediante los caracteres [ y ]. Por ejemplo, si Str es una variable de cadena, la expresión Str[3] devuelve el tercer carácter de la cadena.

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

La sintaxis Basic admite:

  • Declaraciones: SUB...END SUB, FUNCTION...END FUNCTION
  • Directivas: BYREF, DIM
  • Condicionales: IF...THEN...ELSE...ELSEIF...END IF, SELECT CASE...END SELECT
  • Bucles: FOR...TO...STEP...NEXT, DO...WHILE...LOOP, DO...LOOP...WHILE, DO...UNTIL...LOOP, DO...LOOP...UNTIL
  • Operadores: ^, *, /, AND, +, -, OR, <>, >=, <=, =, >, <, DIV, MOD, XOR, SHL, SHR
  • Gestión de errores: TRY...EXCEPT, TRY...FINALLY
  • Otros: EXIT, constructores de matrices [1, 2, 3], acceso a objetos ObjectName.Property

Existen dos formas: IF...THEN...END IF e IF...THEN...ELSE...END IF. Si la expresión es verdadera, se ejecutan las instrucciones de THEN. Si es falsa, se ejecutan las instrucciones de ELSE (si las hubiera).

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

Si la instrucción ocupa una sola línea, no necesita END IF:

IF J <> 0 THEN Result = I/J

Si la selectorExpression coincide con una de las expresiones caseexpr, se ejecutarán las instrucciones correspondientes. De lo contrario, se ejecutará la instrucción CASE ELSE.

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

La instrucción FOR repite la ejecución de instrucciones hasta que un contador alcanza un valor final.

FOR counter = initialValue TO finalValue STEP stepValue
Statements
NEXT

La parte STEP es opcional; si se omite, el valor del paso es 1.

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

Una instrucción WHILE repite las instrucciones mientras una condición de control sea verdadera. La condición se evalúa antes de ejecutar las instrucciones.

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

Las instrucciones se ejecutan WHILE (mientras) una expresión sea verdadera, o UNTIL (hasta que) una expresión sea verdadera. La condición se puede comprobar antes o después de la iteración.

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

Las declaraciones son similares a las del Basic estándar. Para devolver un valor desde una función, asígnelo a la variable implícita con el mismo nombre que la función, o use la instrucción Return. Los parámetros se pueden pasar por referencia mediante la directiva 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

Los subs y las funciones son públicos de forma predeterminada, pero se pueden declarar como PRIVATE.