Вы не перебрасываете значение текстового поля в число. Предполагая, что вы сравниваете целые значения, изменить сравнение с:
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
Ну, Я нашел обход, добавив еще одну ячейку в пользовательскую форму, показывающую HPMax, но я по-прежнему действительно кури почему он это делал, и если кто-нибудь знает, как это исправить – Yawrf