Cómo utilizar estructuras en VBA? El Usuario tipos de datos definidos
Digamos que está intentando crear un sistema de gestión escolar. Aquí, tendrás diferentes tipos de variables como el nombre del estudiante, el número de registro del estudiante, la clase, etc. Una escuela también tiene maestros, por lo que habrá nombres de maestros, asignaturas del maestro, clases, etc. De manera similar, habrá muchos otros objetos como , bibliotecario, clases, principio, etc. Ahora tener diferentes variables para cada entidad en la escuela será un trabajo complicado. ¿Qué tal crear un tipo de datos de alumno, profesor, clases, etc. que almacene valores relacionados con ellos? Para esto podemos usar tipos de datos definidos de VBA.
En este artículo, aprenderemos cómo puede crear su propio tipo de datos en VBA. Se les conoce como UDT de VBA. === Definición de un tipo de datos definido por el usuario Para definir una estructura o UDT en VBA usamos el bloque Type___End Type.
Aquí está la sintaxis de un UDT.
Type Tname_Of_Data_Type var1 as datatype 'datatype can be anything, int, array,or even UDT var2 as datatype Var3() as datatype --- VarN() as datatype End Type
Entonces, para definir un tipo de datos personalizado en VBA, comenzamos con Type Keyword. Luego escribimos el nombre de nuestro tipo de datos personalizado. Es una convención usar T antes del nombre del tipo de datos para que pueda diferenciar entre link: / excel-macros-and-vba-how-to-use-vba-collections-in-excel [vba collections]
y UDTs . Los tipos de datos pueden ser cualquier cosa. Y Integer, String, Variant, otro UDT, Arrays, colecciones, cualquier cosa.
Para usar su UDT en el programa, declare su variable como cualquier otra variable.
Sub UseUDT 'Declaring variable of user defined data type Dim myVar1 as Tname_Of_Data_Type Dim myVar2 as Tname_Of_Data_Type End Sub
Sencillo. Ahora, para usar las variables dentro de este UDT, usamos el operador de punto.
Utilice el nombre del tipo de datos seguido de un punto y el nombre de la variable dentro.
Sub UseUDT 'Declaring variable of user defined data type Dim myVar1 as Tname_Of_Data_Type Dim myVar2 as Tname_Of_Data_Type myVar1.var1="Abcd" myVar2.Var2="xyvz" End Sub
Basta de teoría, saltemos a un ejemplo para ver cómo funciona.
Crear una variable de estudiante que almacene información relacionada con el estudiante Entonces, tenemos la tarea de crear un tipo de datos definido por el usuario que almacene información relacionada con los estudiantes.
Un estudiante tiene nombre, apellido, número de lista, fecha de nacimiento, clase, sección, materias.
Así que creémoslo.
'Created a Public Student Data Type Public Type Tstudent fName As String 'For First Name lName As String 'For Last Name rNo As Integer 'For Roll Number clss As string 'For Class section As String 'For Section Name subjects() As String 'For Subjects of student End Type 'Use this Tstudent type in subroutine Sub StudentsInfo() 'Creating and initializing student type variable Dim student1 As Tstudent student1.fName = "Manish" student1.lName = "Singh" student1.rNo = 12334 student1.clss = 10 student1.section = "A" ReDim student1.subjects(2) student1.subjects(0) = "physics" student1.subjects(1) = "Math" 'Printing student details. Debug.Print (student1.fName) Debug.Print (student1.lName) Debug.Print (student1.rNo) Debug.Print (student1.clss) Debug.Print (student1.section) Debug.Print (student1.subjects(0)) Debug.Print (student1.subjects(1)) End Sub
Cuando ejecute el sub anterior, imprimirá el resultado como se muestra a continuación:
Manish Singh 12334 10 A physics Math |
Crear una matriz de UDT y acceder a elementos
Del mismo modo, puede crear tantas variables como necesite del tipo Tstudent.
Incluso puede crear una matriz de tipo Tstudent como cualquier otro tipo de datos.
Public Type Tstudent fName As String 'For First Name lName As String 'For Last Name rNo As Integer 'For Roll Number clss As string 'For Class section As String 'For Section Name subjects() As String 'For Subjects of student End Type 'Creating an arrays of Tstudents type Sub SchoolInfo() Dim schoolName As String Dim students() As Tstudent schoolName = "Senior School" ReDim students(10) For i = 0 To 9 students(i).fName = "name" & Str(i + 1) students(i).rNo = i + 1 Next i Debug.Print ("Name : Roll No") For i = 0 To 9 Debug.Print (students(i).fName & " : " & students(i).rNo) Next i End Sub
Cuando ejecute este código, se imprimirá en la ventana inmediata.
Name : Roll No name 1 : 1 name 2 : 2 name 3 : 3 name 4 : 4 name 5 : 5 name 6 : 6 name 7 : 7 name 8 : 8 name 9 : 9 name 10 : 10 |
En el código anterior, primero definió la estructura UDT antes y el sub (explicaré más adelante por qué). Acabamos de crear una matriz usando una palabra clave tenue como lo hacemos para cualquier variable en VBA. Luego usamos Redim para definir el tamaño de las matrices. Luego usamos un bucle for para inicializar la matriz.
Para acceder a los elementos de la estructura usamos otro bucle for. Eso es.
¿Por qué declaramos UDT en la parte superior del módulo?
Si declaramos un UDT primero en un módulo, fuera de cualquier subrutina o función, está disponible para todos los módulos en el libro de trabajo. Significa que si tiene cien subs y funciones en un módulo, todos ellos pueden declarar variables de tipo Student en su cuerpo. Si el UDT no es privado, estará disponible para todos los módulos del libro de trabajo. Si desea que una estructura (UDT) esté disponible solo para un módulo contenedor, declare que es privada.
Private Type Tstudent fName As String lName As String rNo As Integer clss As Integer section As String subjects() As String End Type
No puede tener UDT a nivel de procedimiento. Significa que no puede definir un tipo de datos definido por el usuario dentro de una subrutina o función.
Tipos definidos por el usuario anidados Supongamos que tiene UDT llamado coche. El coche tiene sus propios elementos. De manera similar, tiene un UDT llamado bicicleta que puede tener sus propias propiedades.
Ahora digamos que necesita un tipo de datos llamado vehículo. El vehículo puede tener un automóvil y una bicicleta como elementos. ¿Podemos hacer esto? Sí, podemos hacer esto. Consulte el siguiente código
Private Type Tcar seats As Integer ac As Boolean typ As String color As String manufacturer As String Dop As Date rc_no As String End Type Private Type Tbike seats As Integer typ As String color As String manufacturer As String Dop As Date rc_no As String End Type Private Type Tvehicle number_of_Vehicle As Integer bike As Tbike car As Tcar End Type Sub vehicleVarification() Dim myVehicles As Tvehicle myVehicles.number_of_Vehicle = 2 myVehicles.bike.seats = 1 myVehicles.bike.typ = "Racing" myVehicles.car.seats = "4" myVehicles.car.ac = True Debug.Print myVehicles.number_of_Vehicle Debug.Print myVehicles.bike.typ Debug.Print myVehicles.car.ac End Sub
Aquí, hemos definido tres tipos de datos definidos por el usuario. Primero está Tcar que contiene información relacionada con los automóviles. El segundo es la bicicleta, también contiene información sobre la bicicleta.
El tercer UDT es Tvehicle. Contiene una variable para almacenar el número de vehículos y dos variables de tipo Tcar y Tbike.
Vehículo de tipo privado
número_de_vehículo como entero
bicicleta como Tbike
coche como Tcar
Tipo de final
Para acceder a las variables de Tcar y Tbike podemos usar el tipo de datos Tvehicle. En el sub, hemos definido solo una variable del tipo Tvehicle como myVehicles. Cuando creamos esta variable, VBA también crea variables de Tcar y Tbike.
Para inicializar y acceder a las variables de Tcar y Tcar, podemos usar la variable myVehicle. Como puede ver en el código.
myVehicles.number_of_Vehicle = 2
myVehicles.bike.seats = 1
myVehicles.bike.typ = «Carreras»
myVehicles.car.seats = «4»
myVehicles.car.ac = True
Cuando ejecutamos el sub, así ocurre el resultado.
Esta característica realmente aumenta exponencialmente el poder de programar VBA. Puede estructurar su tipo de datos como entidades del mundo real. Puede crear relaciones entre tipos de datos que pueden resultar útiles en un gran proyecto.
Así que sí, chicos, así es como pueden crear y usar un tipo o estructura de datos definidos por el usuario en VBA. Espero haber podido explicarlo. Si tiene alguna pregunta sobre este artículo o cualquier otra pregunta relacionada con VBA, pregúnteme en la sección de comentarios a continuación. Estaré muy feliz de saber de ti.
Artículos relacionados:
link: / general-topics-in-vba-vba-variables-in-excel [Variables de VBA en Excel]
| * VBA significa Visual Basic para Aplicaciones.
Es un lenguaje de programación de Microsoft. Se utiliza con aplicaciones de Microsoft Office como MSExcel, MS-Word y MS-Access, mientras que las variables de VBA son palabras clave específicas.
link: / general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope]
| * En todos los lenguajes de programación, tenemos especificadores de acceso variable que definen desde dónde se puede acceder a una variable definida. Excel VBA no es una excepción. VBA también tiene especificadores de alcance.
link: / celdas-rangos-filas-y-columnas-en-vba-cuál-es-la-diferencia-entre-byref-y-byval-argumentos-vba-entrevista-pregunta [ByRef y ByVal Arguments]
| Cuando se pasa un argumento como argumento ByRef a una función o sub diferente, se envía la referencia de la variable real. Cualquier cambio realizado en la copia de la variable se reflejará en el argumento original.
link: / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirm-prompts-using-vba-in-microsoft-excel [Eliminar hojas sin mensajes de confirmación usando VBA en Microsoft Excel]
| Dado que está eliminando hojas usando VBA, sabe lo que está haciendo.
Le gustaría decirle a Excel que no muestre esta advertencia y elimine la maldita hoja.
link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Add And Save New Workbook Using VBA In Microsoft Excel 2016]
| En este código, primero creamos una referencia a un objeto de libro de trabajo. Y luego lo inicializamos con un nuevo objeto de libro de trabajo. El beneficio de este enfoque es que puede realizar operaciones en este nuevo libro de trabajo fácilmente. Como guardar, cerrar, eliminar, etc `link: / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Mostrar un mensaje en La barra de estado de Excel VBA *] `| La barra de estado en Excel se puede utilizar como monitor de código. Cuando su código VBA es extenso y realiza varias tareas usando VBA, a menudo deshabilita la actualización de la pantalla para que no vea que la pantalla parpadea.
link: / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Desactivar mensajes de advertencia usando VBA en Microsoft Excel 2016]
| * Este código no solo deshabilita VBA alertas, pero también aumenta la eficiencia del tiempo del código. Veamos cómo.
Artículos populares:
link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-aumentar-su-productividad [50 accesos directos de Excel para aumentar su productividad]
| Acelera tu tarea. Estos 50 atajos lo harán trabajar aún más rápido en Excel.
enlace: / fórmulas-y-funciones-introducción-de-función-vlookup [La función BUSCARV en Excel]
| Esta es una de las funciones más utilizadas y populares de Excel que se utiliza para buscar valores de diferentes rangos y hojas. enlace: / tips-countif-in-microsoft-excel [COUNTIF en Excel 2016]
| Cuente valores con condiciones usando esta asombrosa función. No necesita filtrar sus datos para contar valores específicos.
La función Countif es esencial para preparar su tablero.
link: / excel-formula-and-function-excel-sumif-function [Cómo utilizar la función SUMIF en Excel]
| Esta es otra función esencial del tablero. Esto le ayuda a resumir valores en condiciones específicas.