如果那么奇怪的错误

时间:2015-04-27 20:11:15

标签: vba ms-access if-statement access-vba

我在VBA中遇到了很奇怪的问题。我正在尝试比较2个值,一个是从表中分配的变量( ComboBox上的AfterUpdate事件),另一个是用户在表单上的文本框中键入的值。

nosivost = DLookup("max_nosivost", "tbl_vozila", "[registarska_oznaka]='" & Me.vozilo.Column(2) & "'")
If nosivost < Me.kolicina Then MsgBox "Some text", vbCritical, "Title"

Me.vozilo是ComboBox的名称,显示来自tbl_vozila的记录。 Me.kolicina是TextBox的名称。

问题在于我每次都会MsgBox,即使If-Then语句不正确。例如,如果我在TextBox中键入10并从ComboBox中选择具有max_nosivost = 30的记录,我仍然会获得MsgBox。

我检查了变量nosivost的值,而DLookup正在返回正确的值。

1 个答案:

答案 0 :(得分:2)

始终对变量进行vartype。您可能正在比较字符串和数字。

A=30
B="30"

'wont match
If A = B then msgbox "hi"

msgbox vartype(A)
Msgbox Vartype(B)
If Clng(A) = CLng(B) then msgbox "hi"

vartype返回的值。使用

Return Values

Constant Value Description 
vbEmpty 0 Empty (uninitialized) 
vbNull 1 Null (no valid data) 
vbInteger 2 Integer 
vbLong 3 Long integer 
vbSingle 4 Single-precision floating-point number 
vbDouble 5 Double-precision floating-point number 
vbCurrency 6 Currency value 
vbDate 7 Date value 
vbString 8 String 
vbObject 9 Object 
vbError 10 Error value 
vbBoolean 11 Boolean value 
vbVariant 12 Variant (used only with arrays of variants) 
vbDataObject 13 A data access object 
vbDecimal 14 Decimal value 
vbByte 17 Byte value 
vbUserDefinedType 36 Variants that contain user-defined types 
vbArray 8192 Array