2017-01-29 6 views
1

У меня есть оператор If, который не должен запускаться, но это так. Вот текущая настройка:Excel VBA Если оператор ошибочно запускает

If HP.Value > Range("HPMax").Value Then 
    MsgBox (HP.Value & "/" & Range("HPMax").Value) 
    HP.Value = Range("HPMax").Value 
    MsgBox (HP.Value & "/" & Range("HPMax").Value) 
End If 

У меня есть ящики сообщений, чтобы показать, что это действительно происходит. в настоящее время HP находится на уровне 29, а HPMax - 60.

+0

Ну, Я нашел обход, добавив еще одну ячейку в пользовательскую форму, показывающую HPMax, но я по-прежнему действительно кури почему он это делал, и если кто-нибудь знает, как это исправить – Yawrf

ответ

8

Вы не перебрасываете значение текстового поля в число. Предполагая, что вы сравниваете целые значения, изменить сравнение с:

If IsNumeric(HP.Value) Then 
    If Int(HP.Value) > Range("HPMax").Value Then 

Если десятичный важно, используйте Double:

If IsNumeric(HP.Value) Then 
    If CDbl(HP.Value) > Range("HPMax").Value Then 

EDIT В ответ на ваш комментарий:

Равенство VBA (=, <>, <=, >=, >, <), дополнение (+)) и конкатенация (&), операторы ведут себя по-разному, когда оба операнда имеют тип String и когда один или оба операнда являются числовыми.

'equality operators do string comparisons if both operands are strings, regardless of whether they're numeric 
Debug.Print "25" < "200" 'Prints False 
Debug.Print 25 < "200" 'Prints True 
Debug.Print "25" < 200 'Prints True 
Debug.Print 25 < 200  'Prints True 

Debug.Print "25" > "200" 'Prints True 
Debug.Print 25 > "200" 'Prints False 
Debug.Print "25" > 200 'Prints False 
Debug.Print 25 > 200  'Prints False 

'+ concatenates if both items are strings, regardless of whether they're numeric 
Debug.Print "25" + "200" 'Prints 25200 
Debug.Print 25 + "200" 'Prints 225 
Debug.Print "25" + 200 'Prints 225 
Debug.Print 25 + 200  'Prints 225 

'- always casts both operands to numbers, and if either is non numeric, throws a Type Mismatch error 
Debug.Print "25" - "200" 'Prints -175 
Debug.Print 25 - "200" 'Prints -175 
Debug.Print "25" - 200 'Prints -175 
Debug.Print 25 - 200  'Prints -175 

'& Always concatenates 
Debug.Print "25" & "200" 'Prints 25200 
Debug.Print 25 & "200" 'Prints 25200 
Debug.Print "25" & 200 'Prints 25200 
Debug.Print 25 & 200  'Prints 25200 

Вы могли бы иметь такой код, который работает большинство времени

Dim x As String 
x = "1" 
Debug.Print x < "80", Int(x) < "80" 'Prints True True 

Но если x начинается с "9", у вас есть ошибка

x = "9" 
Debug.Print x < "80", Int(x) < "80" 'Prints False True 
+0

Хм, у меня есть другие вещи в разных местах на протяжении всего моего проекта, которые почти точно такие же, и все они работают. Я не знаю, спасибо! – Yawrf

+2

Похоже, вам нужно срочно проверить остальную часть вашего проекта. См. Мое редактирование. – ThunderFrame

+0

Ах! Хорошо, сейчас я понимаю. Благодаря! Я пережил остальную часть своего проекта, просто чтобы убедиться, что все остальное сделано и работает так же, как и все остальное, и я не нашел эту проблему в другом месте – Yawrf

Смежные вопросы