Variables publicas entre Sub (procedures)

Hola, veras tengo una duda acerca de las variables publicas.
Tengo un formulario en el cual hago un cambio en un registro en un solo campo, pero hago antes hago una validación. Por eso, necesito dos eventos: "BeforeUpdate" y "Form_AfterUpdate". No utilizo el evento "AfterUpdate" porque me mira el cambio justo al actualizar ese campo, y me interesa el registro entero para hacer luego un Form.Requery (con el "AfterUpdate" a secas y tira adelante, pero al no moverme de registro da error).
Entonces tengo una variable definida en el evento "BeforeUpdate" y quiero que la lea luego el "Form_AfterUpdate".
Mi código es el siguiente:
--------------------
Option Compare Database
Public Sub CONTROL_BeforeUpdate(Cancel As Integer)
On Error GoTo blabla
Static var As String
var = Nz(Me.Form!CONTROL, " ")
blablabla:
Exit Sub
End Sub
Public Sub Form_AfterUpdate()
msgbox var 'me aparece en blanco
Forms!Formulario!Subform.Form.RecordSource = "CONTROL"
End Sub
--------------------
He probado lo que dicen en la web http://www.developerfusion.com/article/51/variables/6/  pero en cuanto pongo lo de "Call" en la primera función que tiene la variable o lo de "byval" o "byref" en la segunda como argumento me da un error de compilación:
---------
La expresión /aquí el evento\ que introdujo como valor de la propiedad de evento produjo un error. La declaración del procedimiento no coincide con la descripción del evento o el procedimiento que tiene el mismo nombre.
Visual Basic para Aplicaciones (VBA) ha encontrado un problema al intentar obtener acceso a una propiedad o método.
----------
He leido que se ha de hacer con Static. ¿Es posible hacer lo que quiero? Porque me da error si en teoría es válido el Call y el byref/byval?
Gracias por tu tiempo!
Respuesta
1
Olvidate de Static, tienes que definir la variable a nivel de módulo, justo debajo de Option Compare:
Private Var as String
También deberías inicializarla en el evento Open.
Por cierto, los eventos por defecto son Private, ¿por qué los defines Public?
¿Te refieres al evento Openform (o algo así)? Tendría solo ese evento para declarar esa variable, ¿también he de usar ahí el "Private Var As String"?
Pues los eventos los defino public por eso de que el contenido del Sub se comparte con el exterior (el resto de Sub en mi caso), y por eso quería asegurarme que si de un Sub a otro no se comparte una variable no era porque lo he definido como private.
La variable se declara a nivel de módulo, fuera de cualquier procedimiento Sub o Function.
Un procedimiento ha de ser Public si vas a llamarlo desde fuera del módulo (formulario) en el que está definido.
Genial, al final no hacia falta declararla en el Openform.
Es sencillo y ya lo había probado así, solo que no estaba seguro si funcionaria porque me daba un error y no sabia de que (típico error de compilación de modulo invalido).
Entonces ahora que me lo has dicho tu que entiendes del tema, he estado probando paso a paso y he visto que el problema venia de declarar una variable con el mismo nombre que un control (un campo de un form en este caso).
Una vez le he cambiado el nombre a la variable funciona todo perfecto.
Gracias de nuevo!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas