Código VBA
Código VBA
El lenguaje Visual Basic para Aplicaciones es un lenguaje orientado a objetos porque siempre se empieza
con un objeto al que se le aplica una propiedad o un método.
Objetos.
Un objeto es conceptualmente todo lo que hay en una planilla de Excel. Ej: una celda, un rango de celdas,
una columna, un botón, una hoja, lo que sea…
Range(“A5:B5,C10”)
Cells(5,1) celdas concretas, muy útil para los loops (ciclos de repeticiones)
ActiveCell celda activa
Si no se ha especificado en qué libro y hoja de Excel está el objeto al que nos referimos, se dará por hecho
que es en la hoja que tenemos abierta cuando ejecutamos nuestra macro. En el caso de que se quiera
especificar la jerarquía es la siguiente: Excel. Libros (Workbooks). Hojas (Sheets). Celdas (Cells)
Ej: Workbooks(“Libro1.xlsx”).Sheets(“Hoja2”).Range(“A5”)
Propiedades.
Características o funciones del objeto. Las propiedades también pueden tener subpropiedades. Ej:
ActiveCell.Font.Bold = True
Métodos.
Select
Activate
Para navegar entre hojas (SHEET) se utilizan sobre todo las propiedades Next y Previous
Ej: ActiveSheet.Previous.Select
Para navegar entre libros se codifica de manera similar que entre hojas.
Workbooks(“Mi-Libro-De-Macros”) .Activate
Hay otra manera de hacerlo muy poco común que es mediante el número de índice:
Workbooks(1).Activate , de manera que activa el primer libro que hemos abierto.
Es obligatorio activar primero el libro que se quiera y luego otra orden activando o seleccionando la hoja
que se requiera.
Cuando estamos escribiendo una línea de código muy larga y queremos dividirla en varias para visualizarlo
mejor, se separa mediante un espacio seguido de _ y ya pasando a la siguiente fila.
Workbooks(“Libro1.xlsx”). _
Sheets(“Hoja2”). _
Range(“A1”) .Value = “Hice esto desde otro Libro mi Mer”
Para leer la información en un lugar y escribirla en otro hacemos que el contenido de una objeto no sea un
valor concreto sino el contenido de otra: Range(“B1”) .Value = Range(“A1”) .Value
Ejemplo de escribir el valor de una variable en la celda G18 y que dicha variable contenga el valor de la
celda activa:
MiSegundaVariable = ActiveCell.Value
Range(“G18”) .Value = MiSegundaVariable
Para copiar y pegar algo escribimos: Range(“A1”).Copy Range(“B1”) -> rango origen y rango destino.
Value solo copia el valor mientras con la función de .Copy se copia todo hasta el formato.
2. Caja de herramientas
En caja de herramientas del programador se encuentran todas las herramientas necesarias para poder
realizar programaciones dinámicas. Está formada por: variables, loops, pruebas lógicas, fórmulas con
código, cajas y arrays
2.1 Variables
Cuando creamos una variable estamos creando un espacio de memoria donde se va a guardar un dato que
luego puedes disponer. No es lo mismo cómo llamamos a la variable que el contenido/ dato que le damos
Las variables tienen las mismas convenciones para sus nombres que las Subrutinas:
Deben tener menos de 255 caracteres
Usar solo letras, números y guiones bajos
No se permiten espacios (se suelen “JuntarLasPalabras” o también “usar_guiones_bajos”) • No pueden
comenzar con un número
Existe un estilo de construcción del nombre de las variables (que es extraoficial) llamado el estilo
Leszynski, o Húngaro, que propone poner prefijos en las variables, objetos, etc. con la abreviatura del tipo
de elemento que son:
intMiContador int indica que es un Integer
frmMiForma frm indica que es una forma
ModLoBasico Mod indica que es un módulo
El alcance significa en qué lugares del código puedes ver a una determinada variable. El alcance se
determina al declarar la variable:
A nivel procedimiento Puede usarse la Sub en que se declaró (*). Se declara con Dim
A nivel módulo Puede usarse en todo el módulo. Se declara con Dim
A nivel público Puede usarse en todo el proyecto. Se declara con Public
(*) Puede pasarse a otra Sub si se modifica el código (ver clase Variables – Variables Locales con Cambios)
• Dim Local Se destruye al llegar a End Sub de la subrutina en que fue declarada
• Dim Módulo Se destruye cuando:
o Se Cierra el libro o Se presiona "Stop" en VBA o Se agrega una
nueva Sub al módulo o Se llega a la declaración End
• Proc Public Se destruye al llegar a End Sub del módulo donde se declaró
Para que una variable sea útil, es necesario asignarle un valor (poner algo dentro de ella)
Programada estáticamente strMiString = “Hola Mer”
Programada Dinámicamente strMiString = Range(“A1”).Value
Dim X As Integer Puede ser usada localmente (en la Sub) o a nivel del modulo
Public Y As Long Usada al nivel del proyecto
2.2 Loops
Los Loops nos permiten la posibilidad de realizar actividades repetitivamente hasta que se cumpla la
condición que hace que se detengan. Hay varios tipos
- Do Loop
Sub LoopDoLoop()
Range(“A1”) .Select
Do While ActiveCell.Value < 20
ActiveCell.offset(1,0) .Select
Loop
End Sub
- For Next
Sub LoopForNext()
Range(“A1”) .Select
For intiMiContador = 1 To 10 Step 2
ActiveCell.offset(1,0) .Select
Next
End Sub
*For Next escalonada: la estructura es la misma pero también establecemos qué tan largos son los pasos
que va a dar.
- While Wend
Sub LoopWhileWend()
Range(“A1”) .Select
While ActiveCell.Value < 5
ActiveeCell.Interior.Color = vbGreen
ActiveCell.offset(1,0) .Select
Wend
End Sub
If
When
Else
And
Or
= , <>
Case Is :selección de casos
Usando .FormulaR1C1 RELATIVAMENTE. R no tiene número (nos quedamos en la misma fila), C[-1]
significa que buscamos en la columna de la izquierda
RC[1] buscaría una columna a la derecha
ActiveCell.FormulaR1C1 = "=65-RC[-1]"
2.5 Cajas
La función Inputbox (caja) presenta un mensaje al usuario, permitiéndole ingresar un valor en una caja de
texto. Los parámetros principales de esta función son: Inputbox (Promt, Title, Default)
El aspecto más importante de InputBox es que nos devuelve una cadena con lo que haya ingresado el
usuario en la caja de texto. Luego podemos realizar una tarea específica dependiendo del valor obtenido.
MiString = "Es un placer conocerte, " & Respuesta1 & " " & Respuesta2
Range("A1").Value = MiString
2.6 Arrays
Similares a las variables, pero pueden almacenar mucha información o conjuntos completos de datos.
Funciones del Excel: