Cómo Utilizar las Estructuras VBA
In this Article
Este tutorial mostrará cómo utilizar estructuras en VBA.
Una estructura en VBA es esencialmente un tipo de datos definido por el usuario. Cuando usamos variables en VBA, podemos declararlas como variables de cadena, variables numéricas, etc. Crear una estructura esencialmente crea un nuevo tipo de variable, la estructura misma puede contener múltiples tipos de datos. Muchos usos de Excel utilizan módulos de clase en lugar de estructuras, pero eso puede significar que termines con una cantidad innecesaria de módulos de clase individuales.
Definición de una Estructura
Una estructura comienza con la palabra Tipo y termina con Tipo Final.
Type Proveedor
Nombre As String
Telefono As String
Direccion As String
Vendedor As String
End Type
Para utilizar esta estructura dentro de un procedimiento, podemos hacer lo siguiente:
Sub PruebaProveedor()
Dim strP As Proveedor
strP.Nombre = "Fred Jones"
strP.Telefono = " 123 Oak Lane, Cleveland"
strP.Direccion = "4589341"
strP.Vendedor = "Jim"
End Sub
Un tipo es esencialmente una forma de agrupar variables que están relacionadas entre sí, como los datos del cliente.
Una estructura necesita ser almacenada en un módulo y necesita estar en la parte superior del módulo donde se almacenarían las variables del módulo.
Una estructura no puede ser almacenada en un módulo de clase o módulo de formulario – si usted fuera a almacenar el tipo en el módulo de clase y luego tratara de llamar al tipo desde un módulo o incluso desde dentro de esa clase, terminaría ocurriendo un error.
Utilizando una Estructura para Obtener Datos de un Rango
En nuestro libro de trabajo, tenemos la siguiente tabla de datos:
Ahora podemos crear una estructura en un nuevo módulo para almacenar el Nombre del Empleado, la Edad y la Descripción del Puesto.
Type Empleados
EmpNombre As String
EmpEdad As Integer
EmpPuesto As String
End Type
Ahora podemos crear una rutina para hacer un bucle a través de un rango en Excel y rellenar el tipo con múltiples empleados.
Sub obtenerEmpleadoss()
Dim Empleado() As Empleados
Dim i As Integer
ReDim Empleado(10)
For i = 0 To 9
Empleado(i).EmpNombre = Range("B" & i + 2)
Empleado(i).EmpEdad = Range("C" & i + 2)
Empleado(i).EmpPuesto = Range("D" & i + 2)
Next i
'mostrar en ventana inmediata
For i = 0 To 9
Debug.Print (Empleado(i).EmpNombre & " tiene " & Empleado(i).EmpEdad & " años de edad y trabaja como: " & Empleado(i).EmpPuesto)
Next i
End Sub
Primero declaramos un array variable como una variable Empleados. Luego dimensionamos el array y hacemos un bucle a través de un rango de celdas en un libro de Excel para poblar el array. A continuación, mostramos los resultados en la ventana de depuración (inmediata).
Estructuras Anidadas
Considere las siguientes estructuras:
Ahora, pongamos una tercera estructura debajo de estas 2:
Type Factura
FacVen As Empleados
FacCli As Clientes
End Type
Donde la variable FacVen ha sido definida como una variable de tipo Empleados, mientras que la variable FacCli ha sido definida como una variable de tipo Clientes.
Por lo tanto, podemos desglosar nuestro procedimiento para rellenar algunas variables.
Cuando creemos nuestro procedimiento, aparecerá una lista desplegable mostrando las variables disponibles en cada tipo.
Por lo tanto, podemos rellenar nuestras variables como se muestra en el siguiente procedimiento:
Sub ObtenerInfo()
Dim strFact As Factura
strFact.FacCli.CliNombre = "Bob Smith"
strFact.FacCli.CliDir = "123 Oak Lane, Cleveland"
strFact.FacVen.EmpNombre = "Fred Lindburgh"
strFact.FacVen.EmpPuesto = "Gerente de Ventas"
End Sub