Condicional para valorar campos con código VBA para Access

Tengo el siguiente código para valorar sin un campo en principio es nulo, si no, entonces que compare la cantidad ingresada por el usuario con un cuadro de texto independiente con un valor traído desde una consulta y por último si ninguna de estas dos condiciones se cumple, es decir, si el campo tiene valor y este es menor o igual al traído desde la consulta, entonces inserte los valores en la tabla correspondiente, pero no lo ejecuta correctamente, siempre me dice que el valor introducido es supera al stock actual.

El código que estoy utilizando es el siguiente:

If IsNull(Me.Cantidad) Then
MsgBox "Introduzca un valor en el cuadro CANTIDAD para dar salida a productos", vbInformation, "TNG"
Me.Cantidad.SetFocus
ElseIf (Me.Cantidad) > (Me.Stock) Then
MsgBox "La cantidad ingresada supera al stock actual del producto. Verifique", vbInformation, "TNG"
Me.Cantidad.SetFocus
Else
Dim comandoS As String
comandoS = "INSERT INTO Salidas (IdProducto, CantidadS) VALUES (IdProducto, Cantidad);"
DoCmd.RunSQL comandoS
Me.Cantidad = Null
MsgBox "Salida de productos realizada satisfactoriamente", , "TNG"
End If

2 respuestas

Respuesta
1

Mauricio: Como primera medida mira si los Controles de Cantidad y Stock tienen Formato de Número y los campos de las Tablas Origen también.

Quizá yo haría el proceso de otro modo, pero cada uno tiene sus costumbres.

Te lo anoto por si lo quieres mirar. Pones Cantidad como Campo Requerido.

Private Sub Cantidad_AfterUpdate()
If Not IsNull(Me.Cantidad) And Me.Cantidad < Me.Stock Then
Dim comandoS As String
          comandoS = "INSERT INTO Salidas (IdProducto, CantidadS) VALUES (IdProducto, Cantidad);"
         DoCmd.RunSQL comandoS
         Me.Cantidad = Null
    MsgBox "Salida de productos realizada satisfactoriamente", , "TNG"
Else
    MsgBox “Tienes el Stock por debajo de lo que intentas sacar”,vbCritical,”STOCK INADECUADO”
End If
End Sub

Ya me contarás. Saludos >> Jacinto

¡Gracias! Jacinto por tu respuesta, justo el formato de los cuadros de texto fue lo que modifiqué y ahora funciona correctamente, ya que los dos campos involucrados en esta acción son independientes, [StockActual] que viene de una consulta y que a su vez es calculado al restar las salidas de las entradas, me lo traigo con un DLookUp y [Cantidad] que es donde el usuario introduce un número que a su vez viaja a la tabla de salidas. Tengo que decir que en verdad estoy agradecido, puesto que ayer me pasé gran parte del día tratando de solucionar el problema y no lo logré, por eso fue que recurrí a TodoExpertos.

Por nada Mauricio: Aquí estamos. Mis saludos >> Jacinto

Respuesta
1

Al código que pones, en principio no le veo ningún defecto (yo, como Jacinto, lo habría hecho un poco diferente, pero en esencia igual).

Parece que el problema está en los datos que tienes en los cuadros de texto, que hace que no se comparen bien. Como dices que el valor del cuadro Stock viene de una consulta, si en ella es un campo calculado, pudiera ser que tenga un formato texto.

Intenta cambiando la linea del ElseIf por esta otra:

ElseIf Val(Me. Cantidad) > Val(Me. Stock) Then

O ésta:

ElseIf CInt(Me. Cantidad) > CInt(Me. Stock) Then

El código que te propone Jacinto (correcto sin duda), viene a ser el mismo que tienes tu, pero cambiando el orden (y perdiendo el mensaje personalizado si dejas cantidad sin rellenar). Por lógica, tal como tienes tu bd, tampoco te debería funcionar, pues si evalúa mal "Me.Cantidad > Me.Stock" también lo hará al revés "Me.Cantidad < Me.Stock"

Saludos!


¡Gracias! Sveinbjom por tu pronta respuesta, lo he solucionado estableciendo el formato de ambos cuadros de texto a Número, ahora los evalúa sin ningún problema. He de agradecerte también el link de soluciones de Access y felicitarte por tu participación en siliconproject de dónde he obtenido bastante ayuda. Un abrazo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas