Imprimir página | Cerrar ventana

variable publica

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85397
Fecha de impresión: 20/Abril/2024 a las 17:37


Tema: variable publica
Publicado por: Kublai
Asunto: variable publica
Fecha de publicación: 11/Julio/2020 a las 12:16
Hola a todos.
Soy nuevo en el foro y también muy novato con el VBA. Os ruego un poco de paciencia si mis consultas os parecen demasiado obvias o simples.
Tengo un problemilla al rular un módulo asociado a un botón de comando de un formulario de access: declaro pública una variable tipo cadena, le doy valor y luego quiero que me la reconozca un informe, para incluirla en él.
El problema es que no se cómo hacer esa segunda parte: incluir la cadena en el informe. No se qué tipo de objeto emplear ni cómo.
Os pego el código que llevo escrito en el módulo:

Option Compare Database
Public variablepublica As String

Private Sub Comando155_Click()
variablepublica = RTrim(Objeto) & " TEXTOTEXTOTXTO " & RTrim(Perceptor) & " HOLAHOLAHOLAHOLA " & RTrim(NIF)
'MsgBox variablepublica
DoCmd.OpenReport "Informe1"

End Sub

Muchas gracias por vuestra ayuda



Respuestas:
Publicado por: prga
Fecha de publicación: 11/Julio/2020 a las 14:28
Hola.
Bienvenido al foro.
1º.-Las variables públicas se han de declarar en un módulo independiente. Sí se hacen en un "formulario", en un principio sólo sirven para el formulario.
2º.-Las variables públicas no se reconocen directamente en los controles de un informe, hay que "encontrarlas" a través de una función o en el VBA del informe
3º.-Para pasar valores de un formulario a un informe, cabe la posibilidad de hacerlo a través del "openarg" que es el último parámetro que se puede enviar con docmd.opereport.......
4º.-.....
Espero que ayude a solucionar la duda
Ya comentas
Un saludo a todos


Publicado por: Kublai
Fecha de publicación: 12/Julio/2020 a las 08:04
Publicado originalmente por prga prga escribió:

Hola.
Bienvenido al foro.
1º.-Las variables públicas se han de declarar en un módulo independiente. Sí se hacen en un "formulario", en un principio sólo sirven para el formulario.
2º.-Las variables públicas no se reconocen directamente en los controles de un informe, hay que "encontrarlas" a través de una función o en el VBA del informe
3º.-Para pasar valores de un formulario a un informe, cabe la posibilidad de hacerlo a través del "openarg" que es el último parámetro que se puede enviar con docmd.opereport.......
4º.-.....
Espero que ayude a solucionar la duda
Ya comentas
Un saludo a todos

Hola prga. Ante todo, gracias por tu ayuda.
Siguiendo tus instrucciones, he creado esta función en un módulo independiente:

Public Function Devuelvevariablepublica() As String
Devuelvevariablepublica = variablepublica
End Function


El código del botón del informe que lanza el report queda así:

Option Compare Database
Public variablepublica As String

Private Sub Comando155_Click()
variablepublica = RTrim(Objeto) & " TEXTOTEXTOTXTO " & RTrim(Perceptor) & " HOLAHOLAHOLAHOLA " & RTrim(NIF)
MsgBox variablepublica
MsgBox Devuelvevariablepublica()
DoCmd.OpenReport "Informe1", acViewPreview

End Sub

Y en el informe creo un cuadro de texto y en el origen del control pongo:

=Devuelvevariablepublica()

Pero finalmente el cuadro de texto no devuelve nada. Queda en blanco. Tampoco devuelve nada el segundo MsgBox. Algo he debido hacer mal, seguro.

Además, no se utilizar el parámetro "openarg" que mencionas.


Publicado por: prga
Fecha de publicación: 12/Julio/2020 a las 10:17
Hola.
Con lo expuesto, creo que "Public variablepublica as string" no está definida en el sitio adecuado, tiene que estar en el módulo "estandar" para que sea verdaderamente pública.
Por otra parte lo del openargs está explicado en la ayuda del access y en el foro hay innumerables entradas en la que está, pero básicamente es:
para pasar el valor
DoCmd.OpenReport "nombrereport", acViewPreview, , , , elvalor

y para recuperar el valor , en el evento open del informe algo parecido a:

Private Sub report_Open(Cancel As Integer)
If IsNull(Me.OpenArgs) Then
''''aquí las cosas si no se pasa valor
  Else
'''aquí las cosas si se pasa valor
 End If
End Sub


Está escrito de memoria, así es que....
Ya comentas.
Un saludo a todos


Publicado por: Kublai
Fecha de publicación: 12/Julio/2020 a las 12:30
Conseguido!!!
La variable pasa al informe sin problemas.

Muchísimas gracias!!!



Imprimir página | Cerrar ventana