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

Respuesta de
a
Usuario

Hola, 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.

Agradezco la ayuda.

Un saludo.

Avatar
Experto

Hola!

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.

Saludos,

http://neckkito.siliconproject.com.ar

Usuario

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.

Avatar
Experto

Hola!

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.

Saludos,

Neckkito

Usuario

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.

Usuario

 

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.

Avatar
Experto

Hola!

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.

Saludos,

Neckkito

Usuario

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.

 

Avatar
Experto

Hola!

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.

Un saludo,

Neckkito

Usuario

Hola,

Perfecto,,,, es exactamente como lo quería y te comento varias cosillas:

Me había equivocado al insertar un modulo nuevo en vez de añadirlo al formulario, como me habías dicho y también al no poner el nz cuando enviaba el valor el combo.

No obstante me da un ligero problema por lo siguiente:

El cuadro combinado tiene 3 columnas y el valor que necesito está en la segunda por lo que utilizaba la formula:

Me.Texto6.Value = Nz(Me.cc6.Column(1), 0)

Ahora bien a diferencia de ti, que tienes una tabla creada TValorCombo para utilizarlo en el combo, yo lo que he hecho es utilizar un consulta que coge los 3 campos que necesito y que una vez despliego el combo, me aparecen, y de ahí con la instrucción anterior enviaba el valor de la columna segunda que tiene lo que requiero, algo así:

Pepito / 15,85 / Fecha

Es decir., envío el valor de 15,85.

Pero así no me funciona, porque he añadido un combo nuevo haciendo lo que tu, y de esa manera si funciona.

Me.Texto6.Value = Nz(Me.cc6.Value, 0)

-¿Crees que debo crear una tabla como tu has hecho, o se puede hacer algo, tal y como lo tengo?

Muchas gracias, Me estas ayudando muchísimo.

Un saludo.

Avatar
Experto

¿Puedes prepararme una copia de tu BD (comprimida en zip o rar, por favor) y enviármela a neckkito(ARROBA)myopera(PUNTO)com?

En teoría debería funcionarte independientemente de dónde obtenga su valor el combo. Necesito (ahora ya sí) ver qué estás haciendo para detectar dónde está el fallo.

Espero tus noticias.

Saludos,

Neckkito.