Comparar valores 2 cuadros de Texto en Formulario sin origen de tabla.

Me gustaría poder solucionar lo siguiente:

Tengo un formulario que he creado sin relación con ninguna tabla. En el tengo 2 cuadros de texto. 1 y 2.

Cuadro de texto 1 recibe un numero cuando se actualiza un Cuadro combinado mediante la instrucción:

Me.Texto1 = Me.cc6.Column(1)

Y el cuadro de texto 2 lo recibe de otro cuadro de texto mediante:

Me.Texto2 = Me.Texto19

Ahora lo quisiera es comparar los valores de Cuadro de texto 1 y 2 para mediante la instrucción IF poder ejecutar otra instrucción, algo así:

If Me.Texto1.Value > Me.Texto2.Value Then
MsgBox "balabalaba"

End If

Lo he probado en todos los eventos, posibles, pero no me funciona.

1 respuesta

Respuesta
1

Coge las propiedades del cuadro combinado que tú llamas cc6 y en el evento "Después de actualizar le generas este código:

...

Private Sub...

Dim t1 as variant, t2 as variant

If isnull(me.cc6,value) then exit sub

If insull(me.Texto2.value) then exit sub

me.Texto1.value=me.cc6.Column(1)

t1=meTexto1.value

t2=me.Texto2.value

If t1>t2 then

msgbox "Blabla"

End if

End sub

...

Ahora coges las propiedades del control que tú llamas Texto19 y en el mismo evento, "Después de actualizar", le generas un código muy parecido

....

Private Sub...
Dim t1 as variant, t2 as variant
If insull(me.Texto19.value) then exit sub
me.Texto2.value=me.texto19.value
t1=meTexto1.value
t2=me.Texto2.value

If isnull(t1) then exit sub
If t1>t2 then
msgbox "Blabla"
End if
End sub

...

A ver si te funciona bien.

Hola, muy buenas.

En primer lugar muchísimas gracias por la respuesta. Me ha funcionado la primera parte correctamente, pero la segunda no y te comento porque.

Cuando envío el valor de cc6.column (1) al cuadro de texto 1 va todo correcto, pero luego a la hora de comparar dicho valor con otro cuadro de texto cuyo valor lo coge en datos de la suma de varios cuadros de texto,, no me funciona:

Datos cuadro de texto 2 =(Nz([Texto8])+Nz([Texto10])+Nz([Texto11]))

Y quiero que cuando el cuadro de texto 2 sea mayor que el cuadro de texto 1 me de un msg.

Si yo meto a mano un numero en cuadro de texto 1, si me funciona, pero al traerlo del cc6, no me lo hace bien.

No se si me explicado correctamente. Ya me dirás.

Gracias,

Un saludo.

Puedes hacer lo siguiente:

Borra los códigos que te había dado antes. Cambiaremos la sistemática.

En el módulo asociado al formulario, debajo de la línea "Option Compare Database" (y de la línea "Option Explicit" si la tienes) escribes:

...

Sub compruebo()

Dim t1 as long, t2 as long 'Si utilizas decimales decláralos como Double

t1=nz(me.Texto1.value,0)

t2=nz(me.Texto2.value,0)

If t2>t1 then

msgbox "Bla"

End if

End sub

...

Para que no te dé errores de código comprueba que los controles Texto1 y Texto2 sólo admitan formato numérico. Para ello sacas sus propiedades -> Pestaña Formato -> Formato, y ahí le eliges que formato numérico que necesites.

Ahora, en el evento "Después de actualizar" de los controles Texto8, Texto10 y Texto11 escribes el siguiente código:

...

Private Sub...

Call compruebo()

End Sub

....

En el control cc6, en el mismo evento "Después de actualizar", tienes que llamar al procedimiento después de asignar el valor al textbox. Es decir, una cosa así:

---

Private Sub...

me.Texto1.value=me.cc6.Column(1)

Call compruebo()

End Sub

...

A ver si así te sale.

Ya me dirás.

Hola,

he añadido el modulo como comentas, pero me devuelve el siguiente error:

Option Compare Database
Option Explicit

Sub compruebo()
Dim t1 As Double, t2 As Double 'Si utilizas decimales decláralos como Double
t1 = Nz(Texto6.Value, 0)
t2 = Nz(Texto19.Value, 0)
If t2 > t1 Then
MsgBox "Bla"
End If
End Sub

En la linea de t1, si pongo Me.texto6.value,0 me dice que no se admite el ME, y si lo quito y lo dejo como ves, al elegir en el cc6 una opción, me devuelve el error 424 en tiempo de ejecución , se requiere un objeto y me señala la linea t1=Nz(texto6.value,o).

Gracias,

Un saludo.

Hola,

Perdón, cuando ejecuto el cc6 me salta al vb y me dice que no se ha definido la variable Texto6, señalándome la line t1=.......

Gracias.

En tu código inicial hablabas de que el control se llamaba Texto1, y en el último código que te pasé te escribí:

t1=nz(me.Texto1.value,0)

t2=nz(me.Texto2.value,0)

Y ahora tú me lo cambias y me hablas de un "Texto6" y de un "Texto19". Si vas cambiando los nombres no nos aclararemos nunca.

Te escribo las equivalencias:

T1 -> Texto1 -> Textbox donde se guarda el valor devuelto por cc6

T2 -> Texto2 -> Textbox donde guardas el campo calculado de la suma de los tres campos.

Para saber qué nombre tienen esos controles tienes que sacar sus propiedades e irte a Pestaña Otras -> Nombre.

Ahí o bien cambias el nombre que aparece en la propiedad por el que tienes en el código o bien adaptas los nombres del código a los de la propiedad.

Hola,

Perdona, tienes toda la razón. Tan solo he adaptado el ejemplo con Texto1 y Texto 2 a los casos que yo requiero, dado que tengo otros nombres.

No obstante, cambiando solo el numero del text box, da el error que te he comentado. Y no puedo poner el Me.texto1 como me has comentado.

Al igual que sale error que te he comentado que no se ha definido la variable....

Es decir:

Option Compare Database
Option Explicit
Sub compruebo()
Dim t1 As Double, t2 As Double 'Si utilizas decimales decláralos como Double
t1 = Nz(Texto1.Value, 0)
t2 = Nz(Texto2.Value, 0)
If t2 > t1 Then
MsgBox "Bla"
End If
End Sub

Me devuelve los errores anteriormente mencionados.

Muchas gracias.

Echa un vistazo a este ejemplo y compáralo con el tuyo, a ver si puedes detectar las diferencias y arreglarlas: http://www.filebig.net/files/KCP96JQjRZ

Ten en cuenta que:

- He renombrado los controles para que tuvieras más fácil distinguir a qué estoy haciendo referencia.

- Tal y como te comentaba, el procedimiento compruebo() está en el propio módulo del formulario que yo he llamado FComparador. Es en el módulo asociado a este formulario donde debes buscar todos los códigos.

Ya me dirás.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas