Problemas con MsgBox: No aparece

Tengo una condición que es la siguiente:

Existe = True
If Existe = True Then
DoCmd.OpenForm (todo el camino) , acEdit, acNormal
DoCmd.Close acForm, "Buscar Expediente"
End If
Else
MsgBox "No se ha encontrado el Expediente buscado" & vbYesNo & "¿Desea incorporarlo ahora?", vbInformation, "NO ENCONTRADO"
If vbYes Then
DoCmd.GoToRecord , , acNewRec
End If

Bueno, la cuestión es: desde un formulario "Buscar Expediente" ingreso los datos y acciono el Botón Buscar. Si existe lo ubica en el Formulario Principal. Hasta acá todo bien.

Si no existe me lleva directo a un nuevo registro en el Formulario Principal (que estaría bien) pero yo quiero que me aparezca el MsgBox con el Si No para elegir si quiero agregarlo o no. O sea, si quiero agregarlo oprimo Si y me lleva a un nuevo registro. Si oprimo No sale sin abrir el Formulario Principal.

3 respuestas

Respuesta
2

Partiendo de que lo que te die Sveinborj es lo correcto, me permito observarte que después del primer If lo has cerrado con End If y luego !has puesto Else! Else debe ir antes de End if

If Existe = True Then
DoCmd.OpenForm (todo el camino) , acEdit, acNormal
DoCmd.Close acForm, "Buscar Expediente"
Else
MsgBox "No se ha encontrado el Expediente buscado" ,vbyesno,"Haga otra cosa"
If vbYes Then
DoCmd.GoToRecord , , acNewRec
End If

End If

Gracias, hice eso y no funciona igual.

Te mando todo el evento 

Private Sub CdoBuscarExpte_Click()

Dim CadenaExpediente As Variant

CadenaExpediente = (Me.TxtCarátula) And (Me.TxtNúmero) And (Me.TxtAño) And (Me.TxtAlcance)
If TextoExp = CadenaExpediente Then
DoCmd.OpenForm "Expedientes", acNormal, "", "[Expedientes]![TextoExp]=[Forms]![Buscar Expediente]![TxtCarátula] & [Forms]![Buscar Expediente]![TxtNúmero] & [Forms]![Buscar Expediente]![TxtAño] & [Forms]![Buscar Expediente]![TxtAlcance]", acEdit, acNormal
DoCmd.Close acForm, "Buscar Expediente"

Else
Response = MsgBox("No se ha encontrado el registro buscado", vbYesNo, "¿Desea ingresarlo ahora?", vbInformation, "NO ENCONTRADO")
If Response = yes Then
DoCmd.GoToRecord , , acNewRec
End If
End If
End Sub

Vamos por partes;

1º el msgbox no es correcto, La instrucción Msgbox se compone en esencia de sólo tres partes, una, el texto que te aparece "abajo", la segunda vbokonly o vbyesno, etc. o sea las opciones que vas a presentar y la tercera el título del mensaje. Nada mas, pero tu le estás añadiendo más cosas. Deberías ser algo así

MsgBox("No se ha encontrado el registro buscado", vbYesNo + vbinformation, "¿Desea ingresarlo ahora?")

2º Le dices que response= msgbox pero ¿Qué es response? Mientras no definas la variable Access no sabe a que te refieres. Tendrías que poner

dim response as integer

response=msgbox(....

if response=vbyes then....

Gracias. Hice los cambios pero nada.

La cuestión que no entiendo es por qué NO aparece el cuadro de mensaje con las opciones.

Yo lo único que quisiera es que si el Expediente no existe me apareciera el mensaje si lo quiero agregar o no, nada más. Si digo Si que se abra el formulario para agregar, pero si digo No que no lo haga.

qué es lo que hace saltear el MsgBox???

Te agradezco el interés. Espero aparezca algo o lo usaré así.... mis conocimientos no dan para más (y de hecho son muy básicos).

En vez de estar divagando que puede ser, quizá lo mejor es que me mandes un mensaje a [email protected] y te mando un par de ejemplos. Si lo haces, en el asunto del mensaje pon tu alias Tabaré, ya que si no sé quien me lo manda, ni los abro.

Respuesta
2

Si empiezas el código con Existe=True, es imposible que el bloque If (If Existe=True) ejecute las lineas de código de la parte del Else (que sería cuando Existe=False)...

Tendrás que replantearte cuando asignar el valor a la variable Existe, y además hacerlo en función de si el expediente que buscas existe o no...

Gracias. Esto es todo lo que tengo en el comando botón al hacer click

Lo simplifiqué hasta este punto:

Private Sub CdoBuscarExpte_Click()

Dim CadenaExpediente As Variant

CadenaExpediente = (Me.TxtCarátula) And (Me.TxtNúmero) And (Me.TxtAño) And (Me.TxtAlcance)

If ValorTextoExp = CadenaExpediente Then

DoCmd.OpenForm "Expedientes", acNormal, "", "[Expedientes]![TextoExp]=[Forms]![Buscar Expediente]![TxtCarátula] & [Forms]![Buscar Expediente]![TxtNúmero] & [Forms]![Buscar Expediente]![TxtAño] & [Forms]![Buscar Expediente]![TxtAlcance]", acEdit, acNormal
DoCmd.Close acForm, "Buscar Expediente"

Else
MsgBox "No se ha encontrado el registro buscado", vbYesNo, vbInformation, "NO ENCONTRADO"
If vbYes Then
DoCmd.GoToRecord , , acNewRec

End If
End If
End Sub

Aparece perfecto si el expediente existe y si no va derecho a uno nuevo si pasar por el MsgBox

Es muy difícil saber lo que tienes con solo ese código.

En principio, si cambias la parte del ELSE por esta otra, te tendría que funcionar (con las salvedades que diré luego):

Else
If MsgBox ("No se ha encontrado el registro buscado", vbYesNo+vbInformation, "NO ENCONTRADO")= vbYes Then DoCmd.GoToRecord , , acNewRec

End If

End Sub

Ahora bien, veo muchas cosas "raras" en tu código:

1º/ ValorTextoExp ¿Es una variable o un control del formulario? ¿Si es una variable, dónde toma su valor?

2º/ En CadenaExpediente, si quieres encadenar los valores de los controles debes usar "&" y no "AND":

CadenaExpediente = Me.[TxtCarátula] & Me.[TxtNúmero] & Me.[TxtAño] & Me.TxtAlcance

3º/ Si no se cumple la condición (y por tanto salta el mensaje) y le das a Sí, ¿te lleva a un registro nuevo del formualrio de búsqueda? Yo a eso no le veo sentido...

Y si le das a No: ¿Qué hace?

Hola, la CadenaExpediente junta los cuatro datos del formulario expediente. Un expediente es, por ejemplo, 5136  25486  13  25   y lo toma como 5136254861325. Este valor lo iguala con un campo que esta en la tabla Expedientes y que sale de una consulta de actualización :[Expedientes]![Carátula] & [Expedientes]![Número] & [Expedientes]![Año] & [Expedientes]![Alcance] para evitar que haya expedientes repetidos.

Si encadeno los valores como indicás, no me trae el resultado, pero me aparece el MsgBox aunque no va a un nuevo registro, es decir, no responde al botón Si ni al No.

Si querés te mando todo el archivo.

Te aclaro que todo lo hecho es con conocimientos muy bajos y modificado de otros ejemplos o ayudas.

Envíala si quieres, comprimida, a:

[email protected]

Limítate a dejar los dos formularios que intervienen en el proceso, y las tablas necesarias para que funcionen.

Respuesta
1
Existe = True
If Existe = True Then
DoCmd.OpenForm (todo el camino) , acEdit, acNormal
DoCmd.Close acForm, "Buscar Expediente"
Else
x= MsgBox ("No se ha encontrado el Expediente buscado" & vbYesNo & "¿Desea incorporarlo ahora?", vbInformation, "NO ENCONTRADO")
If x= vbYes Then
DoCmd.GoToRecord , , acNewRec
End If
End if

Me comentas y recuerda valorar para finalizar saludos!!!

Gracias por lo rápido de la respuesta. Pero no funciona, se salta el cuadro de mensaje y va derecho al formulario.

No entiendo qué puede  pasar, aunque soy cero en esto

¿Con cuál lenguaje de programación estás trabajando?

Visual Basic. ¿Net?

De ser así es de esta forma

Messagebox.show("Contenido del mansaje",MessageBoxButtons.YesNo, MessageBoxIcon.Information)

Coméntame 

Amigos, primero gracias por la ayuda. Probé todas las combinaciones, y no funciona, es más, lo simplifiqué hasta este punto:

If ValorTextoExp = CadenaExpediente Then

DoCmd.OpenForm "Expedientes", acNormal, "", "[Expedientes]![TextoExp]=(todo el camino), acEdit, acNormal
DoCmd.Close acForm, "Buscar Expediente"

Else
x = MsgBox("No se ha encontrado el registro buscado", vbYesNo, "Desea Ingresarlo ahora", vbInformation, "NO ENCONTRADO")
If x = Yes Then
DoCmd.GoToRecord , , acNewRec

EndIf

EndIf

Si el expediente existe me lleva perfecto, pero si no existe el MsgBox no aparece y va a un nuevo registro.

Envíame tu archivo para revisarlo [email protected] 

Con el archivo te referís a toda la aplicación con tablas, etc  o sólo este evento?

Haber muestra todo el evento.

¿Dime con que lenguaje estas trabajando?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas