Abrir un formulario basado en una variable

Seguro que para los entendidos en Visual Basic, no creo que sea muy complicado lo que pregunto, aunque para mí es un reto en este lenguaje. Intentaré explicarme lo mejor que pueda.

Tengo un formulario con estos controles:
- Un cuadro de texto txtId
- Un botón de comando CmdFiltros y dos cuadros combinados ocultos: Comb1 y Comb2 (Cuando se pulsa CmdFiltros, se hacen visibles Comb1 y Comb2.
- Y un botón de comando CmdEnviar

TxtId, Comb1 y Comb2 almacenan texto.

La rutina básica que deseo lograr al hacer clic en CmdEnviar sería la siguiente:
Private Sub CmdEnviar_Click()  
   Dim stDocName As String
   Dim V as String
   stDocName = "F"
   

  ‘ objetivo: definir el valor V
  ‘ …………………

    ''DoCmd.OpenForm  stDocName, , , V

End Sub


Es decir, se trata de crear una variable V para que abra el formulario F al hacer clic
(F tiene Origen de Registro una consulta C, basada a su vez, en una tabla T).

La pregunta sería obtener las sentencias de código para definir el valor de V dependiendo de unas condiciones:

a) Si:

El valor de Comb1 es Null y el valor de Comb2 es también Null (esto equivale a que el usuario no ha seleccionado ningún valor de ninguno de los dos combos, o bien, que ni siquiera ha pulsado CmdFiltros que los hace visibles),

ENTONCES:

V Debe tomar el valor txtId, y el procedimiento debe abrir F con la condición de búsqueda V (se muestran los registros que cumplen la condición de la consulta C con campo1=txtId).

b) Si:

Comb1 tiene un valor distinto de Null (o sea, el usuario ha hecho selección en Comb1) y el valor de Comb2 es Null (el usuario no selecciona nada en Comb2),

ENTONCES:

V debe tomar un valor compuesto por txtId y además Comb1, dado que el formulario F mostraría los registros que cumplen la condición de la consulta C (campo1 =txtId y campo2=Comb1).

c) Si:
Comb1 tiene valor distinto de Null y Comb2 tiene un valor distinto de Null,

ENTONCES:

V Tomaría un valor compuesto por txtId, Comb1 y Comb2, para que al abrir F se tengan
los registros que cumplen C (campo1= txtId, campo2=Comb1 y campo3=Comb2).
Vamos que por ejemplo para éste último caso c), básicamente F mostraría lo que sería equivalente a un Select campo1, campo2, campo3 From Tabla where (campo1=txtId and campo2=Comb1 and campo3=Comb2).

Espero que lo entiendan y les agradecería mucho si me pueden ayudar.

1 respuesta

Respuesta
1

Yo lo que haría sería abrir el formulario con las distintas opciones.
Para ver si Comb1 y Comb2 son nulos utilizamos la función IsNull (nos devolverá Verdadero o Falso)
If IsNull(Form!Comb1.Value)=True and IsNull(Form!Comb2.Value)= true then
Docmd.OpenForm "ComoSeLlameElFormulario", acNormal, , "Campo1='" & Form!txtId & "'"
End if
If IsNull(Form!Comb1.Value)=True and IsNull(Form!Comb2.Value)=False then
Docmd.OpenForm "ComoSeLlameElFormulario", acNormal, , "Campo1='" & Form!txtId & "' and Campo2='" & form!Comb1.Value & "'"
End if
If IsNull(Form!Comb1.Value)=False and IsNull(Form!Comb2.Value)=False then
Docmd.OpenForm "ComoSeLlameElFormulario", acNormal, , "Campo1='" & Form!txtId & "' and Campo2='" & form!Comb1.Value & "' and Campo3='" & Form!Comb2.Value & "'"
End if
Es decir, iría poniendo el "where" correspondiente para cada opción.

Muy bien, muchas gracias por tu respuesta. El planteamiento es el que buscaba, sin embargo, me produce el error:

"Se ha producido el error 2501 en tiempo de ejecución. La operación OpenForm se canceló".

¿Por qué podría ser el error? estamos en ello.

Un saludo

¿El error te lo da cuando el registro que busca no existe?

Te digo esto porque este error lo suele dar cuando el formulario no tiene ningún registros con el que abrirse.

Mira bien que todos los campos (campo1, campo2 y campo3) son de texto, si son de texto ponemos: comilla doble comilla espacio & el valor & espacio doble comilla comilla

Si alguno de ellos fuese numérico tendrías que quitar la comilla simple.

Perfesssssto. Al final el campo3 era numérico por lo que sobraban las comillas simples. Muchísimas gracias por tu colaboración, me ha servido mucho. Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas