MSGBOX con "No volver a mostrar este mensaje."

Nuevamente con una consulta: Quisiera aplicar a un MSGBOX o hacer un formulario a modo de mensaje emergente donde incluya un chckbox con el texto "No volver a mostrar este mensaje". A la vez, necesitaría el código que de funcionalidad a este comando.
Y otra cosa, cómo volver a activarlo en caso de ser necesario.

Respuesta
1

Debes tener un formulario principal (le llamaré FormPrincipal) el cual es el que muestra el mensaje, en ese formulario podrías declarar una variable(le llamaré DeshabilitarMensaje) que indique si se muestra o no el formulario del mensaje(le llamaré FormMensaje).
La variable la declaras de la siguiente forma

Public DeshabilitarMensaje as Boolean

y para mostrar el mensaje algo como

Sub MostrarMensaje()
    If DeshabilitarMensaje=False Then
        FormMensaje.Show
    End If
End Sub

En el formulario del mensaje creas tu interfaz con el checkbox y cuando lo cierres(evento QueryClose o Similar) dependiendo del valor que tenga el checkbox (le llamaré CheckDeshabilitar) cambias el valor de la variable del formulario principal. El siguiente código debes ponerlo dentro del evento QueryClose o similar

If CheckDeshabilitar=vbChecked Then
    FormPrincipal.DeshabilitarMensaje=True
End if

Para Habilitar el Mensaje Nuevamente Solo Tendrías que cambiar el valor de la variable DeshabilitarMensaje a False, podrías hacerlo con una combinación de teclas, o poner un botón en el formulario principal, o de la forma que mas te parezca.

FormPrincipal.DeshabilitarMensaje=False

No me funcionó. Creé una BdD exclusiva para esta prueba con dos formularios:

FormPrincipal y FormMensaje. En el primero tiene el botón "Cerrar" con nombre CLOSE_WIN; el form del mensaje también, pero añado la casilla con el nombre "CheckDeshabilitar".

En el Principal hice el código:

Option Compare Database
Public DeshabilitarMensaje As Boolean
Private Sub CLOSE_WIN_Click()
DoCmd.CLOSE
If DeshabilitarMensaje = False Then
FormMensaje.SHOW
End If
End Sub 

Al cerrar me arroja "Se requiere un objeto" sobre:

FormMensaje.SHOW

Y no se abre el otro form.

El código en el form del mensaje:

Option Compare Database
Private Sub CLOSE_WIN_Click()
DoCmd.CLOSE
End Sub
Private Sub Form_Close()
If CheckDeshabilitar = vbChecked Then
FormPrincipal.DeshabilitarMensaje = True
End If
End Sub

Al abrir el form del mensaje y probar cerrar me arroja lo mismo sobre el código:

FormPrincipal.DeshabilitarMensaje = True

¿Qué hice mal?

En el formulario principal pon

Option Compare Database
Public DeshabilitarMensaje As Boolean
Private Sub CLOSE_WIN_Click()
    Me.Visible = False
    If Me.DeshabilitarMensaje = False Then
        FormMensaje.Visible=True
    End If
End Sub

En el formulario Mensaje pon

Option Compare Database
Private Sub CLOSE_WIN_Click()
    DoCmd.CLOSE
End Sub
Private Sub Form_Close()
    If CheckDeshabilitar <>0 Then
        FormPrincipal.DeshabilitarMensaje = True
    End If
    FormPrincipal.Visible = True
End Sub

Si te fijas solo cambié algunas cosas de tu código

Sigue arrojando los mismos errores y, ahora, al formulario de respuesta al querer editarlo mientras está en pantalla arroja: "La expresión que ha especificado hace referencia a un objeto que está cerrado o no existe." (2467)

Creo que no estas poniendo correctamente el nombre de los formularios.

Intenta poner los nombre de la siguiente forma: Form_NombreFormulario, por ejemplo el formulario principal seria Form_FormPrincipal.

Formulario principal

Option Compare Database
Public DeshabilitarMensaje As Boolean
Private Sub CLOSE_WIN_Click()
    Me.Visible = False
    If Me.DeshabilitarMensaje = False Then
        Form_FormMensaje.Visible=True
    End If
End Sub

Formulario Mensaje

Option Compare Database
Private Sub CLOSE_WIN_Click()
    DoCmd.CLOSE
End Sub
Private Sub Form_Close()
    If Me.CheckDeshabilitar <>0 Then
        Form_FormPrincipal.DeshabilitarMensaje = True
    End If
    Form_FormPrincipal.Visible = True
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas