Buenas!
Te envio un extracto de la ayuda de MSDN (espero que te sirva, por cierto yo tb vengo de C) Suerte
Crear tipos de datos propios
Se pueden combinar variables de varios tipos diferentes para crear tipos definidos por el usuario (conocidos como structs en el lenguaje de programación C). Los tipos definidos por el usuario son útiles si se quiere crear una única variable que registre varias unidades de información relacionadas.
Puede crear un tipo definido por el usuario con la instrucción Type, que debe colocar en la sección Declaraciones del módulo. Los tipos definidos por el usuario pueden declararse como Private o como Public mediante la palabra clave apropiada. Por ejemplo:
Private Type MiTipoDeDatos
–o bien–
Public Type MiTipoDeDatos
Por ejemplo, podría crear un tipo definido por el usuario que registrara información acerca del sistema de un equipo:
' Declaraciones (de un módulo estándar).
Private Type SystemInfo
CPU As Variant
Memory As Long
VideoColors As Integer
Cost As Currency
PurchaseDate As Variant
End Type
Declarar variables de un tipo definido por el usuario
Para el mismo tipo definido por el usuario puede declarar variables locales, variables privadas de módulo o variables públicas de módulo:
Dim MiSistema As SystemInfo, SuSistema As SystemInfo
En la tabla siguiente se ilustra dónde y con qué alcance puede declarar los tipos definidos por el usuario y sus variables.
Procedimiento/Módulo Puede crear un tipo definido por el usuario como... Las variables de un tipo definido por el usuario pueden declararse...
Procedimientos No aplicable Solamente locales
Módulos estándar Privado o público Privadas o públicas
Módulos de formulario Solamente privado Solamente privadas
Módulos de clase Privado o público Privadas o públicas
Nota Si realiza declaraciones de variables usando la palabra clave Dim, los tipos definidos por el usuario en módulo de clase o estándar serán Public de forma predeterminada. Si quiere que un tipo definido por el usuario sea privado, asegúrese de declararlo usando la palabra clave Private.
Asignar y recuperar valores
Asignar y recuperar los valores de los elementos de esta variable es similar a establecer y obtener propiedades:
MiSistema.CPU = "486"
If MiSistema.PurchaseDate > #1/1/92# Then
También puede asignar una variable a otra si ambas son del mismo tipo definido por el usuario. En la línea de código siguiente se asignan todos los elementos de una variable a los mismos elementos de la otra variable.
SuSistema = MiSistema
Tipos definidos por el usuario que contienen matrices
Un tipo definido por el usuario puede contener una matriz normal (de tamaño fijo). Por ejemplo:
Type SystemInfo
CPU As Variant
Memory As Long
DiskDrives(25) As String ' Matriz de tamaño fijo.
VideoColors As Integer
Cost As Currency
PurchaseDate As Variant
End Type
También puede contener una matriz dinámica.
Type SystemInfo
CPU As Variant
Memory As Long
DiskDrives() As String ' Matriz dinámica.
VideoColors As Integer
Cost As Currency
PurchaseDate As Variant
End Type
Puede tener acceso a los valores de una matriz dentro de un tipo definido por el usuario de la misma manera en que tiene acceso a las propiedades de un objeto.
Dim MiSistema As SystemInfo
ReDim MiSistema.DiskDrives(3)
MiSistema.DiskDrives(0) = "1.44 MB"
También puede declarar una matriz de tipos definidos por el usuario:
Dim TodosSistemas(100) As SystemInfo
Siga las mismas reglas para tener acceso a los componentes de esta estructura de datos.
TodosSistemas(5).CPU = "386SX"
TodosSistemas(5).DiskDrives(2) = "SCSI de 100 MB"
Pasar tipos definidos por el usuario a procedimientos
Puede pasar argumentos de procedimiento mediante un tipo definido por el usuario.
Sub FillSystem (UnSistema As SystemInfo)
UnSistema.CPU = lstCPU.Text
UnSistema.Memory = txtMemory.Text
UnSistema.Cost = txtCost.Text
UnSistema.PurchaseDate = Now
End Sub
Nota Si desea pasar un tipo definido por el usuario a un módulo de formulario, el procedimiento debe ser privado.
Puede devolver tipos definidos por el usuario desde funciones y puede pasar una variable de un tipo definido por el usuario a un procedimiento como un argumento. Los tipos definidos por el usuario siempre se pasan por referencia, de modo que el procedimiento puede modificar el argumento y devolverlo al procedimiento que lo ha llamado, como se muestra en el ejemplo anterior.
Nota Debido a que los tipos definidos por el usuario siempre se pasan por referencia, todos los datos contenidos en dichos tipos se pasarán y se devolverán desde el procedimiento. En el caso de tipos definidos por el usuario con matrices de gran tamaño, esto podría originar una reducción de las prestaciones, especialmente en aplicaciones cliente/servidor, en las que el procedimiento se puede ejecutar desde un equipo remoto. En tal caso, es preferible extraer y pasar únicamente los datos necesarios del tipo definido por el usuario.
Para obtener más información Para obtener más detalles acerca del paso por referencia, vea "Pasar argumentos a procedimientos" en "Fundamentos de programación".
Tipos definidos por el usuario que contienen objetos
Los tipos definidos por el usuario también pueden contener objetos.
Private Type AccountPack
frmInput as Form
dbPayRollAccount as Database
End Type
Sugerencia Como el tipo de datos Variant puede almacenar muchos tipos de datos diferentes, puede usar una matriz Variant en muchas situaciones en las que usaría un tipo definido por el usuario. De hecho, una matriz Variant es más flexible que un tipo definido por el usuario, ya que puede modificar el tipo de los datos almacenados en cada elemento en cualquier momento y puede convertir la matriz en dinámica para modificar su tamaño cuando sea necesario. Sin embargo, una matriz Variant siempre utiliza más memoria que un tipo definido por el usuario equivalente.
Anidar estructuras de datos
El anidamiento de estructuras de datos puede ser tan complejo como se quiera. De hecho, los tipos definidos por el usuario pueden contener otros tipos definidos por el usuario, como se muestra en el ejemplo siguiente. Para hacer que el código sea más legible y fácil de depurar, procure escribir en un único módulo todo el código de los tipos de datos definidos por el usuario.
Type DriveInfo
Type As String
Size As Long
End Type
Type SystemInfo
CPU As Variant
Memory As Long
DiskDrives(26) As DriveInfo
Cost As Currency
PurchaseDate As Variant
End Type
Dim AllSystems(100) As SystemInfo
AllSystems(1).DiskDrives(0).Type = "Floppy"