2015-06-01 4 views
0

Я новичок в Excel Vba и задавался вопросом, может ли кто-нибудь помочь мне разобраться, как эффективно писать этот код.Ошибка несоответствия в Excel VBA

Я пытаюсь сравнить значения, используя инструкции Else-if, но я продолжаю получать ошибку несоответствия при запуске макроса. Это то, что я до сих пор: начала

Dim score1 As Variant, result1 As Variant 

score1 = Range("B24").value 
Sheets("Answers").Range("P1") = VarType(score1) 

If VarType(score1) = 0 Then 
     result1 = "Error" 
     msg1 = " INPUT A VALUE" 
    ElseIf score1 > (((Range("I24").value - Range("H24").value) * 0.2) + ((Range("H24").value + Range("I24").value)/2)) Then 
     result1 = score1 
     msg1 = " Adjust the Left Flank of fH_Beta" 
    ElseIf score1 < (((Range("I24").value - Range("H24").value) * 0.2) - ((Range("H24").value + Range("I24").value)/2)) Then 
     result1 = score1 
     msg1 = " Adjust the Left Flank of fH_Beta" 
    Else 
     result1 = "N/A" 
     msg1 = " No action required" 
End If 

Sheets("Answers").Range("F11").value = result1 

ошибки появляется, когда я изменил две линии ELSEIF от> 2,3 и < -7.7 формул, представленных в коде. Мне нужно написать эти формулы, потому что значения (2.3 & -7.7) могут меняться в зависимости от приложения.

Кстати, первая строка (линия IF) должна сохранять сообщение об ошибке, если ячейка оставлена ​​пустой. Я считаю, что ошибка имеет какое-то отношение ко мне, определяя переменные как тип «Двойной», но я не могу найти способ ее исправить (я также попытался сохранить varialbes As String и изменить каждое .value на .Text).

Любая помощь будет оценена по достоинству. Спасибо ...

**** Обновление: приведенный выше код теперь является текущим кодом, который у меня есть. Формула в этом коде должна принимать значения в I24 и H24 (-7.7 & 2,3) и давать верхний допуск -0,7 (линия с + в нем) и более низкий допуск -4,7 (линия с a - в нем) и используйте эти допуски для оценки ввода пользователя (B24).

Если ячейка оставлена ​​пустой, код запускает первую линию IF и возвращает значение msg1 «INPUT A VALUE». Если пользователь вводит номер вне допустимого значения, код должен выдавать значение msg1 «Настроить левый фланг fH_Beta». Если ни одно из этих условий не выполняется, вход должен находиться в пределах допуска, а значение msg1 должно быть «Нет действий».

Моя проблема: независимо от того, какое значение я вставляю в B24 (даже значение в допустимой степени), я получаю значение msg1 «Настроить левый фланг fH_Beta», и я не знаю почему. Если мне нужно прояснить ситуацию, пожалуйста, дайте мне знать.

Благодаря

+1

Вы не можете использовать ссылки диапазона в VBA так же, как в формулах. Вам нужно: «Диапазон (« I24 »). Значение - диапазон (« H24 »). Значение«, а не «I24 - H24», например. – Rory

+0

Спасибо, Рори, я набрал все мои значения, как вы заявили, и изменил мои переменные на варианты, как сказал Батшеба, и мой код работает без ошибок. – Cam

+0

Извините, я не закончил. Код все еще работает некорректно (т. Е. Я буду вводить число в B24, которое будет находиться между значениями 2.3 и -7.7 (которое должно быть по умолчанию для строки Else кода), но мой вывод все еще возвращает оператор msg1 найденный под линиями Elseif. – Cam

ответ

0

Поскольку score является double (т.е. число), то нет смысла сравнивать его с пустой строкой.

If score1 = "" не имеет смысла. Это даст вам ошибку несоответствия типа.

Альтернативой является использование variant для score. Вариант может существовать как строка, или число, среди других типов. Затем вы можете использовать функцию Vartype, чтобы проверить, что внутри варианта.

+0

Спасибо, что ответили на вопрос о Bathsheba. Я работаю над тем, как включить Vartype в свой код. – Cam

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