2016-05-03 5 views
1

hier ist der Code zu arbeiten, die ich für überprüfen, bevor ein Benutzerformular ausführen: (. Wenn es erfolgreich ist, wird die Q von dem Blatt abgezogen)Excel VBA: Einfach Wenn Funktion scheint nicht richtig

If Sheets("Warehouse").Cells(ProdID + 1, 3) < SalesQ.Text Then 
    MsgBox ("Not enough quantity - ID: ") & ProdID.Text 
    Exit Sub 
End If 

Sheets("Warehouse").Cells(ProdID + 1, 3) = Sheets("Warehouse").Cells(ProdID + 1, 3) - SalesQ.Text 

Grundsätzlich ich habe 2 Blätter - Lager und Vertrieb, ich einfügen von Daten in der Lagerplatte mit einem Userform-Code, den smth wie ist (wenn Sie mehr benötigen, lassen Sie es mich wissen):

Cells(emptyRow, 1) = IDBox.Text 
Cells(emptyRow, 2) = prodBox.Text 
Cells(emptyRow, 3) = QBox.Text 

Also das Problem ist, nachdem ich die Daten zuerst in Warehouse-Blatt eingefügt habe. Immer wenn ich den Verkauf im Verkaufsteil ausprobiere, sagt es mir nicht genug Quantität, obwohl es Quantität gibt. Sagen wir nun Q = 100, funktioniert das Sales-Benutzerformular nicht, wenn ich 90, 80, 60 usw. eingebe, aber es funktioniert, wenn ich eine kleine Zahl wie 20 oder 10 einfüge ... Nach dem anfänglichen Abzug mit kleiner Zahl 10 oder 20, es wird perfekt mit jeder anderen Nummer wie 80 usw. Ich nehme an, es ist etwas mit den Endungen wie (.Text, .Value usw.? Aber IDK) Halp.

+0

Ich weiß nicht, wie SalesQ definiert ist. Angenommen, es ist ein Bereich (d. H. Eine Zelle), dann sollte es "SalesQ.Value" sein. Wenn es wirklich keine Zahl enthält, aber Text enthält, müssen Sie anstelle eines booleschen Vergleichs ('<') eine Zeichenfolgenoperation ausführen. – OldUgly

+0

Worin ist ProdID definiert? Es wird in der IF-Anweisung als Integer- oder Long-Typ verwendet, sieht dann aber so aus, als ob es in der MsgBox-Anweisung als Bereich verwendet wird. – OldUgly

Antwort

4

Ich vermute, dass SalesQ.Text ein Textfeld vom Typ String ist. Daher vergleichen Sie eine Zahl mit einer Zeichenfolge, die zwar zulässig ist, jedoch zu unerwarteten Ergebnissen führen kann.

Wenn SalesQ.Text wirklich eine Zeichenfolge enthält, die eine Zahl darstellt (zB enthält „120“), dann Sie es zu einer Reihe mit der Funktion Val umwandeln kann

Sheets("Warehouse").Cells(ProdID + 1, 3) < Val(SalesQ.Text) 
2

Die .Text Eigenschaft von etwas ist, wird nicht mathematisch mit der Range.Value oder Range.Value2 Eigenschaft ohne Konvertierung in eine echte Zahl vergleichen.

If CDbl(Sheets("Warehouse").Cells(ProdID + 1, 3).Value2) < CDbl(SalesQ.Text) Then 
    MsgBox ("Not enough quantity - ID: ") & ProdID.Text 
    Exit Sub 
End If 

Kurz gesagt, 1 nicht gleich "1".