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

image

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

image

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.

image

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.