[RESUELTO] Tipo personalizado de variable

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

[RESUELTO] Tipo personalizado de variable

Notapor valenteres » Mié Dic 30, 2015 6:15 pm

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   Expandir vistaContraer vista
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   Expandir vistaContraer vista
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
Última edición por mauricio el Jue Ene 14, 2016 9:57 pm, editado 3 veces en total
Razón: Usar icono de RESUELTO
-------------------------------------------------------------
"Como no sabían que era imposible, lo hicieron"

Open Office 4.1.1
Libre Office 5.0
Windows 10
-------------------------------------------------------------
valenteres
 
Mensajes: 81
Registrado: Mié Jun 17, 2015 6:04 pm

Re: Tipo personalizado de variable

Notapor fornelasa » Mié Dic 30, 2015 6:47 pm

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.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3250
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Tipo personalizado de variable

Notapor mauricio » Mié Dic 30, 2015 6:53 pm

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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 6058
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Tipo personalizado de variable

Notapor valenteres » Mié Dic 30, 2015 7:42 pm

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   Expandir vistaContraer vista
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   Expandir vistaContraer vista
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
-------------------------------------------------------------
"Como no sabían que era imposible, lo hicieron"

Open Office 4.1.1
Libre Office 5.0
Windows 10
-------------------------------------------------------------
valenteres
 
Mensajes: 81
Registrado: Mié Jun 17, 2015 6:04 pm

Re: Tipo personalizado de variable

Notapor SLV-es » Jue Dic 31, 2015 5:24 pm

¿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 
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Avatar de Usuario
SLV-es
 
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España

Re: Tipo personalizado de variable

Notapor mauricio » Jue Dic 31, 2015 5:38 pm

SLV-es escribió:¿Por qué declaramos una variable como objeto?

Porque una variable Type es un objeto
Código: Seleccionar todo   Expandir vistaContraer vista
MsgBox TypeName(Contacto)
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 6058
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado