Realización de cálculos VBA Excel erróneos

Resulta que tengo un contrato con un proveedor.
El problema que tengo es que cuando el gasto que voy a introducir sea mayor al dinero que quede del contrato de proveedor se muestre un MSGBOX y no me deje introducir los datos.
El problema es que he puesto en datos del contrato 1.000.000.000 euros y si pongo un numero alto como 999.999 me salta el MSGBOX y no entiendo el porque.

Si pongo 92 si que me deja

Private Sub Enviar_Click()
If falta_gastar.value < total.value Then
MsgBox (" El PREU TOTAL  és superior al la quantitat que resta del contracte. La quantitat disponible és de " & falta_gastar.value & " €")
Total.setfocus
Exit Sub
Else
If totalArt > 0 Then
    For i = 0 To totalArt - 1
        Dades_taulaRow.Range(i + 1, 1).value = Me.num_consecutiu.Caption
        Dades_taulaRow.Range(i + 1, 2).value = Me.num_equipament_final.Caption
        Dades_taulaRow.Range(i + 1, 3).value = Me.tipologia_final.Caption
        Dades_taulaRow.Range(i + 1, 4).value = Me.nom_equipament_final.Caption
        Dades_taulaRow.Range(i + 1, 5).value = Me.municipi.value
        Dades_taulaRow.Range(i + 1, 6).value = Me.comarca.value
        Dades_taulaRow.Range(i + 1, 7).value = Me.provincia.value
        Dades_taulaRow.Range(i + 1, 8).value = Me.Entitat.Caption
        Dades_taulaRow.Range(i + 1, 9).value = Me.programa_final.Caption
        Dades_taulaRow.Range(i + 1, 10).value = Me.FA_final.Caption
        Dades_taulaRow.Range(i + 1, 11).value = Me.pad_final.Caption
        Dades_taulaRow.Range(i + 1, 12).value = Me.proveidor_final.Caption
        Dades_taulaRow.Range(i + 1, 13).value = Me.list_productes.List(i, 0)
        Dades_taulaRow.Range(i + 1, 14).value = Me.list_productes.List(i, 1)
        Dades_taulaRow.Range(i + 1, 15).value = Me.total_pad.Caption
            Dim Cel As Range
            For Each Cel In Range("O3:O9999")
                If Not IsNumeric(Cel.value) Then
                    Cel.value = WorksheetFunction.Trim(Cel.value)
                ElseIf TypeName(Cel.value) = "String" Then
                    Cel.value = Cel.value + 1 - 1
                End If
            Next Cel
        Dades_taulaRow.Range(i + 1, 16).value = Me.data.value
    Next i
Else
    MsgBox "No hi ha material a la llista", vbInformation, "Res..."
    Exit Sub
End If
End If
MsgBox ("ENREGISTRAT CORRECTAMENT")
End sub

3 Respuestas

Respuesta
1

Este puede ser un buen ejemplo de por que NO declarar variable es una mala practica en VBA. (Otros lenguajes ni siquiera te lo permiten)

Declara variables de tipo LONG y quizás se resuelva el problema.

Siempre cabe la posibilidad de que sea otra cosa, pero esto que te digo es lo primero que deberías probar.

Ya que estoy en casa, pude hacer un vídeo demostrándolo.

Video demo

Andy

Me ha funcionado a la perfección. Pensaba que con Option Explicit te avisaría de esto pero ya veo que no me puedo fiar mucho.
Muchas gracias Andy por tu rapidez

Jeje mas bien Option explicit lo que hace es avisarte cuando inicializas una variable no declarada.

Ejemplo:

Variable = "hola mundo"

En este caso option explicit funciona porque no encuentra donde esta la declaración Dim

Pero en tu caso nunca tuviste declaración ni tampoco inicialización, por eso no paso nada :)

Respuesta
1

En la primera línea. Donde pone total.value está bien? O es totalArt.

Y la variable ponla al principio de la macro.

Dim Cel As Range
Respuesta
1

Yo pondría un break en la comparación y verificaría 'a mano' los valores de las celdas "falta_gastar" y "total" porque puede ser que por la configuración regional te esté tomando valores distintos a los que piensas...

Salu2

Gracias gustavo, he declarado la variable long y ya me ha funcionado

Bien, pero ten en cuenta que Long solo permite números enteros, si tus valores pueden incluir decimales sería mejor declararlos como Double

Salu2

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas