2015-04-27 4 views
0

У меня очень странная проблема в VBA. Я пытаюсь сравнить 2 значения, один из которых является переменной, назначенной из таблицы (Событие AfterUpdate на ComboBox), а другое - значение, которое пользователь вводит в текстовое поле в форме.If Then странная ошибка

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 неверно. Например, если я набираю 10 в TextBox и выбираю запись из ComboBox, у которой есть max_nosivost = 30, я все равно получаю MsgBox.

Я проверил значение переменной nosivost и DLookup возвращает правильное значение.

ответ

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