Condicional VBA Access a partir de un campo

y es si es posible generar una condicional (If) a partir de una expresión creada a partir de campos. Es básicamente lo siguiente tengo tres campos [Operador], [Meta] y [Resultado]. La idea es usar el valor del campo [Operador] (campo de tipo texto donde se ubica los signos > o < o <= etc.) como el elemento de comparación en el If seria algo asi:

If [Resultado] [Operador] [Meta] then // Esto traducido sería asi:

If 89 >= (esto depende del valor del campo) 85 then

Si es posible, les agradezco su aporte para poder culminar una nueva fase de mi desarrollo.

1 respuesta

Respuesta
1

Oscar: Sin acabar de entender el Objetivo de tu pregunta, lo que de entrada te comento que no puedes sondear un campo de Texto, como si fuera un Número.

Si quieres sondear un campo Número para tomar una decisión, lo puedes hacer con If o con Select Case..

En el Ejemplo que pones:

If CuadroTextoElQuesea.Value > 89 Then

        MsgBox "Has sobrepasado tu peso",vbCritical,"MENSAJE DEL SISTEMA"

Else

        MsgBox " Perfecto, estás en el Peso!!!", vbInformation, "FELICIDADES"

En If

CuadroDeTextoElQuesea ha de ser numérico.

Si no vanlas cosas por ahí me comentas. Saludos >> Jacinto

¡Gracias! Hola Jacinto, Eso es claro para mi, lo que quiero es usar el campo tipo texto para ubicar el operador de la condicional, es decir allí se seleccionara si el operador es >, <, <=,>= o =, los otros dos campos si son numéricos y son los campos a validar. Seria algo así como lo siguiente:

Oscar: Ahora creo entenderte.

Quieres no "Escribir" el Operador y que lo tome como variable de un Cuadro de Texto, que en tu caso justo se llama "Operador".

En principio y aunque no lo he probado, supongo que se podrá hacer con una variable o algo por el estilo.

Lo que no comentas es si ese Cuadro de Texto, tiene Origen de Datos o es Independiente.

O sea si lo escribes cada vez,

Dado que ando un poco liado me comentas ese punto y cuando tenga un hueco lo miro y te contesto si no veo otra respuesta que te resuelva el problema. Mis saludos >> Jacinto

En efecto el cuadro de texto, tiene su origen de datos en la "Tbl_Cuadro_Indicadores".

y pues obviamente esta dentro del formulario donde pretendo ubicar el procedimiento de evento.

Oscar: He intentado introducir una variable en la Instrucción:

If Dato1 & VariableOperador & Dato2 Then y no consigo hacerlo.

Quizá si algún experto lee tu texto y el mío se anima a dar una solución que a mi no se me ocurre. Lamento no poder ayudarte en ésta ocasión. Mis cordiales saludos >> Jacinto

¡Gracias! 

Oscar: Quedé un poco insatisfecho con la última respuesta que te dí de éste tema.

Creo que al final es más simple de lo que creia.

Trabajando con los Nombres de arriba.

Llena los tres Cuadros de Texto >> Resultado, Operador y Meta.

Crea un Cuadro de Texto nuevo que voy a llamar : TxtCadenaFiltro

En el Evento AfterUpdate de "Meta" le pones:

Private Sub Meta_AfterUpdate()
Me.TxtCadenaFiltro = " " & Me.Resultado & " " & Me.Operador & " " & Me.Meta & " "
End Sub

Como no sé para que lo vas a utilizar, te pongo un Ejemplo de otro procedimiento de Evento, en éste caso en un Botón que llamaré: BtnEvaluaExpresion, para comprobar

Private Sub BtnEvaluaExpresion_Click()
If Eval(Me.TxtCadenaFiltro) Then
   MsgBox "La condición establecida es VERDADERA!!!",vbInformation,"SE CUMPLE"
Else
   MsgBox "La condición establecida es FALSA",vbCritical,"NO SE CUMPLE"
End If
End Sub

No te olvides activar los [Procedimiento de Evento] en las Propiedades.

Quizá me había centrado en exceso en manejar "SOLO" el Operador.

He hecho unas pruebas y me ha dado el mensaje correcto. Mis saludos >> Jacinto

¡Gracias! Excelente, funciona de maravilla.

Como siempre Jacinto, gran aporte!!!

Hola Jacinto, imagínate que encontré un error en el código. Resulta que con número enteros funciona de maravilla, pero cuando incluyo un número decimal me arroja el error. 

He intentado varias cosas pero no tengo éxito, ¿podrías ayudarme de nuevo?. 

Hola Jacinto, ya lo pude solucionar. Quedo así:

If Eval("'" & Me.Resultado & "'" & " " & Me.Operador & " " & "'" & Me.Meta & "'") Then
If MsgBox("El indicador se encuentra en cumplimiento. ¿Desea ingresar otro resultado?", vbYesNo, "Seguimienta a Indicadores") = vbYes Then
DoCmd.GoToRecord , , acNewRec
B2.Enabled = True
B1.Enabled = False
B3.Enabled = False
Else
B1.Enabled = False
B3.Enabled = True
B2.Enabled = True
End If

Gracias por tu ayuda!!!

Perfecto Oscar: Gracias a ti por publicar la solución, ya que todos aprendemos de tos.

Mis sañudos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas