Página 1 de 1

[RESUELTO] Tipo personalizado de variable

Publicado: Mié Dic 30, 2015 6:15 pm
por valenteres
Buenas tardes:

El tema que planteo es sobre la declaración de Tipos personalizados de variable y su ámbito de validez.
Nunca me cansaré de agradecer a Mauricio su manual "Aprendiendo OOo Basic".
En la página 61 del mismo describe la posibilidad de definir variables personalizadas. En mi opinión resulta tremendamente útil, pero he encontrado una limitación, que seguramente será por una utilización inadecuada por mi parte.

La declaración del tipo de variable se hace en la sección de declaraciones de un módulo mediante el siguiente código

Código: Seleccionar todo

Type Contacto
	'Contenido del registro
	Nombre As String
	Edad As Integer
	Ingreso As Date
End Type
Para el uso de este tipo personalizado, el manual presenta dos opciones. Una de ellas es la siguiente:

Código: Seleccionar todo

Sub TiposPersonalizados1()
Dim oContacto As Object
	
	'Creamos un objeto del tipo Contacto
	oContacto = CreateObject( "Contacto" )
	'Llenamos sus datos
	With oContacto
		.Nombre = "Lizette Avila"
		.Edad = 35
		.Ingreso = DateSerial(2005,1,15)
	End With
	'Mostramos sus datos
	MsgBox oContacto.Nombre & " - " & oContacto.Edad & " años - ingreso el " & oContacto.Ingreso
	
End Sub
Si estos dos fragmentos están en al mismo módulo, funciona bien.
Si se pretende utilizar en otro módulo de la misma biblioteca, presenta el siguiente mensaje:


¿Es necesario repetir la definición del Tipo Personalizado en cada uno de los módulos en los que se utiliza?

Muchas gracias

Re: Tipo personalizado de variable

Publicado: Mié Dic 30, 2015 6:47 pm
por fornelasa
valenteres, claramente no es un tema para este foro, ¿hay alguna razón en especial para tratar este tema en el foro de extensiones y no en el foro de Macros?.
Saludos, Federico.

Re: Tipo personalizado de variable

Publicado: Mié Dic 30, 2015 6:53 pm
por mauricio
Mi amigo, me hiciste acordar de Lizette Avila...!!!

Al parecer los tipos personalizados solo pueden ser a nivel modulo, la verdad es que ya no programo en Basic, pero dejame darle una revisada...

Saludos

Re: Tipo personalizado de variable

Publicado: Mié Dic 30, 2015 7:42 pm
por valenteres
Mauricio, Seguro que la has recordado con cariño :P

Dándole algunas vueltas he hecho una prueba más y parece que funciona.
Mi intención es utilizar estas variables personalizadas como argumento de funciones y/o subrutinas que pueden estar en otros módulos.

Por lo que he visto, he llegado a la conclusión de que la limitación comentada se refiere a la declaración de la variable: La variable se debe declarar en rutinas incluidas en el módulo en el que se ha definido el Tipo. De este módulo se puede pasar como argumento de funciones y/o subrutinas, independientemente de que estas estén en el mismo o en otro módulo de la misma librería.

La rutina del código la he desglosado en dos:

Código: Seleccionar todo

Sub TiposPersonalizados1()
Dim oContacto As Object
	
	'Creamos un objeto del tipo Contacto
	oContacto = CreateObject( "Contacto" )
	'Llenamos sus datos
	With oContacto
		.Nombre = "Lizette Avila"
		.Edad = 35
		.Ingreso = DateSerial(2005,1,15)
	End With
	
	call PruebaTP(oContacto)
	'Mostramos sus datos
'	MsgBox oContacto.Nombre & " - " & oContacto.Edad & " años - ingreso el " & oContacto.Ingreso
	
End Sub
Esta primera parte debe estar en el mismo módulo en el que se ha definido el código personalizado. Hago una llamada a una subrutina a la que paso la variable personalizada como argumento.
La subrutina queda:

Código: Seleccionar todo

Sub PruebaTP(tpContacto as Object)
	
	'Mostramos sus datos
	MsgBox tpContacto.Nombre & " - " & tpContacto.Edad & " años - ingreso el " & tpContacto.Ingreso
	
End Sub
Esta segunda parte la he incluido en un módulo diferente del anterior.

Funciona sin ningún problema.

Fornelasa y Mauricio: Respecto a la ubicación de los archivos, a que hace referencia fornelasa, pido una vez más disculpas. No he trabajado mucho en foros. De hecho, creo que es la primera vez que participo de una forma activa.
He cometido varios errores. De hecho e iniciado varios temas como respuesta al principal de EasyDev, y creo que no es precisamente correcto. Cuando los reviso me aparecen todos juntos, y creo que no debería ser así.

Pido de nuevo disculpas y trataré de ir corrigiendo poco a poco

Muchas gracias a todos

Re: Tipo personalizado de variable

Publicado: Jue Dic 31, 2015 5:24 pm
por SLV-es
¿Por qué declaramos una variable como objeto?

Creo que es más sencillo como se indica aquí: http://wiki.open-office.es/Crear_tus_pr ... fice_Basic

Saludos :)
 Editado: Tema movido al foro de macros 

Re: Tipo personalizado de variable

Publicado: Jue Dic 31, 2015 5:38 pm
por mauricio
SLV-es escribió:¿Por qué declaramos una variable como objeto?
Porque una variable Type es un objeto

Código: Seleccionar todo

MsgBox TypeName(Contacto)