VBA Access: Variable se reinicia a Null al cambiar de procedimiento

Al cargar un registro en un formulario, la variable X se inicia con el valor de un campo en un procedimiento.
Al querer hacer uso de ese valor en otro procedimiento inmediatamente después, la variable adopta valor Null. Y no puedo iniciar la variable en este último procedimiento porque es el que va a cambiar el valor en ese campo en cuestión y la variable X la necesito para volver al valor anterior.
Por ejemplo:

Private sub Form_Current()
   Call PROCEDIMIENTO_INICIA
   Call PROCEDIMIENTO_USA
end if
Public Sub PROCEDIMIENTO_INICIA()
' [Todo lo que se necesita en este módulo]
X = me.lstEstado.value
End sub
Public Sub PROCEDIMIENTO_USA()
msgbox X ' La variable se vació y el valor es Null
' Código que usa X
If Variable1 = Variable2 then
   X = Y
Else
  'Se toman otras acciones
End if
End sub

¿Cómo puedo hacer para establecer el valor en X y que no se renueve entre procedimientos?

O bien:

¿Cómo puedo pasar ese valor que debe estar desde la consulta del registro hasta que lo cambie intencionalmente?

ACLARO: X se vacía lo inicie donde lo inicie (En Form_Current o en el procedimiento propio).

Respuesta
2

Sasha: Declara la variable en un Módulo Standard como Publica.

Public X As ..... Integer o Long o String o Variant etc

Mis saludos

Jacinto

La variable X está en un módulo exclusivo para variables públicas. Y aún así no me guarda el valor. Revisé el código y no se genera otro valor en blanco. Adfemás, llamo al procedimiento, al final inicio la variable e inmediatamente llamo al otro procedimiento que se inicia usando ese valor.

Algo tonto, pero parece que funcionó: Cambié el nombre de la variable de X a vX y funciona. O VBA está loco o yo estoy haciendo algo mal... No sé qué hacer. Por ahora puedo decir que funciona, de todos modos, espero que esta pregunta ayude a otros. Abrazos, Jacinto. Siempre tan preciso.

Sasha: He de suponer que no hay error en el código de tu BD y lo que citas arriba del En If después del >> Call Procedimiento_USA es un End Sub y hay una errata en la transcripción.

Una variable Pública no pierde su valor a no ser que tu lo modifiques por código y la verdad es que no veo nada raro.

Captura su valor con un Mensaje o un punto de Interrupción, inmediatamente después de adjudicarle  el Valor en >> X = Me.LstEstado.Value

MsgBox "El valor de X en éste instante es...:  " & X,vbInformation,"VALOR DE LA VARIABLE X"

Es posible que por alguna causa no tome ninguno en lugar de perderlo. Saludos >> Jacinto

Sasha: Justo al pulsar el Enviar, he visto tu aclaración y ciertamente es curioso, porque en ocasiones yo he declarado la X sin más como variable y no he tenido problemas. Veamos si alguien lee ésto y tiene una Explicación. Siempre se aprende. Gracias y un abrazo >> Jacinto

No es una cita del código real, sino un ejemplo de la estructura. Y sí, no es un End If sino un End Sub. Sobre el MsgBox siempre lo uso como herramienta para ver valores y controlar cambios. Por eso descubrí que perdía el valor. Y ahora, con ese cambio está funcionando. Seguro que es una falla de VBA o está dañada la Base de Datos lo que me llevaría a enloquecer. Pero por ahora toco madera.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas