Ayuda. Expresión en Msgbox con botón aceptar y cancelar
Alguien me puede decir como se escribe para que un MsgBox hiciera la función de aceptar y cancelar.
Me encuentro que tanto uno como el otro me hacen la misma función.
1 Respuesta
Cuando lanzas un msgbox, para que te ponga dos botones, tienes que indicárselo y además programar los eventos que quieras para cada uno y una variable que recoja el valor del botón pulsado.
Por ejemplo:
Dim respuesta as integer
respuesta= MsgBox ("Mensaje con botones Aceptar/Cancelar",vbOKCancel,"TITULO MENSAJE")
If respuesta=vbOK then
msgbox "Has pulsado Aceptar"
Else
msgbox "Has pulsado Cancelar"
End if
Fíjate que el msgbox en el primer caso lleva paréntesis. Si quieres poner botones de si/no, en vez de aceptar/cancelar, usarías vbYesNo y respuesta=vbYes.
Si en el editor de vba, coloca el cursor encima de la palabra msgbox y pulsa F1, se te abrirá la ayuda y allí puedes ver todas las opciones de botones y valores devueltos.
Gracias por contestar pero estoy un poco liado.
esto es lo que tengo en activar registro.
If IsNull(Form!IdNomMateria.Value) = True Then
MsgBox "Esta MATERIA no tiene datos para montrar"
End If Close
lo que quisiera es que mostrara los botones aceptar y cancelar si pulso aceptar que habrá el formulario pero si pulso cancelar cierre el box.
A ver si es esto lo que pides, porque me has liado con tu explicación:
Dim respuesta as Integer
If IsNull(Form!IdNomMateria.Value) = True Then
respuesta=MsgBox ("Esta MATERIA no tiene datos para mostrar",vbOkCancel)
if respuesta=vbCancel Then DoCmd.Close acForm, Me.Name
End If Close
De este modo, si pulsas aceptar no hace nada (entiendo que se te carga el formulario), y si pulsas cancelar, se cierra el box y el formulario.
Ya me dirás.
Perdona si no lo e explicado bien.
Lo que quiero es que en el box salga el botón aceptar y cancelar si pulso aceptar
me habrá el formulario MATERIA y si pulso cancelar no haga nada simplemente cierra el box.
Lo que he hecha yo me habré el formulario MATERIA tanto si pulso aceptar como cancelar.
Gracias un saludo.
Prueba a poner el código que te dije antes en vez del que tu tienes y si no te sirve, prueba a poner este otro en el evento al abrir del formulario, en vez de en Al activar registro:
Dim respuesta as Integer
If IsNull(Form!IdNomMateria.Value) = True Then
respuesta=MsgBox ("Esta MATERIA no tiene datos para mostrar",vbOkCancel)
if respuesta=vbCancel Then Cancel=True
End If Close
Siento darte tanto la lata pero es que no me funciona ninguno de los dos
Private Sub Form_Open(Cancel As Integer)
Dim respuesta As Integer
If IsNull(Form!IdNomMateria.Value) = True Then
respuesta = MsgBox("Esta MATERIA no tiene datos para mostrar", vbOKCancel)
If respuesta = vbCancel Then Cancel = True
End If Close
End Sub
el End If Close queda marcado en rojo no se si es por algún problema.
Vamos aver si me aclaro de una vez te explicare desde el principio.
Tengo un menu de opciones con varias opciones entre ellas hay una de colegio que al pulsar me habré un cuadro combinado donde me da a elegir las materias Matemáticas, Ingles etc.
Al pulsar la elegida me habré el formulario de la materia elegida por eso quisiera que si hay alguna materia sin datos me habré el Box informando que dicha materia no tiene datos.
El que me as mandado cuando le doy a cancelar sale.
Se ha producido el error '2501' en tiempo de ejecución:
La acción OpenForm se cancelo.
Pulso en depurar donde tengo lo siguiente
Private Sub Cuadro_combinado80_Click()
If VarType(Me.Cuadro_combinado80) = vbNull Then MsgBox "Elige el gasto.", vbCritical + vbOKOnly, "Error"
Else
DoCmd.OpenForm "Consulta_Materia", , , "[IdNomMateria] = " & Me.Cuadro_combinado80 DoCmd.Close acForm, "Opciones"
End If
End Sub
Marca en amarillo lo subrayado.
Opciones es el menu de opciones.
Gracias.
Vale, eso es que el código que te dí funciona, pero hay que modificar este otro. Prueba así:
Private Sub Cuadro_combinado80_Click()
on error goto sol_err
If VarType(Me.Cuadro_combinado80) = vbNull Then MsgBox "Elige el gasto.", vbCritical + vbOKOnly, "Error"
Else
DoCmd.OpenForm "Consulta_Materia", , , "[IdNomMateria] = " & Me.Cuadro_combinado80 DoCmd.Close acForm, "Opciones"
End If
sol_err:
If err.number=2501 Then resume next
End Sub
Si aún así no te va, haz una cosa:
Haz una copia de tu bd, borra los datos que puedan ser confidenciales, y pásame la copia. Para eso, vete a www.filebig.net, le das a seleccionar archivo, buscas la copia, le das a start upload, y cuando acabe, me pegas aquí el primer enlace que salga.
A ver si así te vale:
http://www.filebig.net/files/KGJydApxnD
Según entendí, en tu formulario Opciones, cuando pulsas en la etiqueta colegio materia se te abre el cuadro combinado con las materias. Ahí, al elegir una, quieres que se compruebe si hay o no datos para mostrar.
Si hay datos, que abra el formulario Consulta_Materia.
Si no hay datos, que lance el msgbox con los dos botones. Si pulsas aceptar, se cierra el msgbox y no hace nada, y si pulsas aceptar, se abre el formulario Consulta_Materia y puedes elegir la materia y rellenar datos.
Los eventos que modifiqué son: el del cuadro combinado de las materias del formulario Opciones, que queda así (pongo en negrita lo nuevo):
Private Sub Cuadro_combinado67_Click()
On Error GoTo sol_err:
If VarType(Me.Cuadro_combinado67) = vbNull Then
MsgBox "Elige el gasto.", vbCritical + vbOKOnly, "Error"
'Me.Cuadro_combinado52.SetFocus
'Me.Cuadro_combinado52.Dropdown
Else
DoCmd.OpenForm "Consulta_Materia", , , "[IdNomMateria] = " & Me.Cuadro_combinado67
DoCmd.Close acForm, "Opciones"
End If
Salida:
Exit Sub
sol_err:
If Err.Number = 2501 Then GoTo Salida
End Sub
Y en el formulario Consulta_Materia, dejé como comentario el código del evento Al activar registro, y añadí este otro en el evento Al abrir:
Private Sub Form_Open(Cancel As Integer)
Dim resp As Integer
If IsNull(Form!IdNomMateria.Value) = True Then
resp = MsgBox("Esta MATERIA no tiene datos para mostrar", vbOKCancel)
If resp = vbCancel Then Cancel = True
End If
End Sub
- Compartir respuesta