我在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
正在返回正确的值。
答案 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