2016-06-20 7 views
0

В некоторых клетках моего столбца появляется #VALUE! слова и формулы внутри является примером:VBA Run Time Error 13 Тип Несовпадение #VALUE

=IF(VALUE(RIGHT(CELL("nome.arquivo";A1);LEN(CELL("nome.arquivo";A1))-SEARCH("]";CELL("nome.arquivo";A1))))=1;1;1+INDIRECT(ADDRESS(329;COLUMN();;;VALUE(RIGHT(CELL("nome.arquivo";A1);LEN(CELL("nome.arquivo";A1))-SEARCH("]";CELL("nome.arquivo";A1))))-1))) 

Упомянутой Колонка CT. Теперь, когда я пытаюсь пройти через ячейки, когда дело доходит до первого появления #VALUE! я получаю сообщение об ошибке:

Run Time Error 13, Type mismatch на этой линии:

L = 9 
     Do While Cells(L, "CT").Value <> ""   '<========= HERE AN ERROR 
      L = L + 8 
     Loop 

Как исправить это?

ответ

1

Cells не принимает какой-либо String параметра, ошибка типа несоответствия вы получаете не имеет ничего общего с #VALUE/данные, обрабатываемым - потому что код никогда не получает оценку данных, так как Cells хочет два Integer параметров : dang это укусит меня каждый раз - очевидно, вы может использовать параметры строки в функции Cells. Тьфу.

Таким образом, проблема заключается в сравнении значения с "" - строка. #VALUE! не является допустимой функция строки, так что вы должны объяснить это:

Dim theCell As Range 
Set theCell = Cells(L, "CT") 
If Not IsError(theCell.Value) Then 
    Do While Not IsEmpty(theCell.Value) 
     '... 
     L = L + 8 
    Loop 
End If 

Вы также можете захотеть, чтобы правильно квалифицировать, что вызов функции:

Do While Not IsEmpty(ActiveSheet.Cells(L, "CT").Value) 

Таким образом, это явного что вы» re посмотреть на ячейку в рабочем листе; безоговорочный вызов - это неявным образом, что делает что-то неявное потенциально запутанным и подверженным ошибкам.

Убедитесь, что верхняя часть модуля говорит Option Explicit и L правильно заявил:

Dim L As Long 

«L» бессмысленного идентификатор, вы должны рассмотреть его именования после того, что вы используете его для:

Dim currentRow As Long 
currentRow = 9 

Do While Not IsEmpty(ActiveSheet.Cells(currentRow, "CT")) 

Таким образом, ваш код станет намного легче читать, следить и понимать.

+0

«Ячейки» принимают два параметра «Вариант», а второй может быть строкой (буква столбца в нотации «A1»). 'Ячейки (L," CT ")' являются действительным вызовом. – GSerg

+0

@GSerg Я знаю, я был в середине редактирования этого ... каждый раз укусил меня. черт возьми, это уродливо. –

+0

Я проверил весь ваш код и не работал - также ошибка несоответствия типа. Я нашел этот способ, который отлично работает: Do While IsEmpty (Ячейки (L, «CT»). Значение). Что вы думаете о моем подходе? –

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