Ваша проблема здесь:
On Error Resume Next
lRow = Application.WorksheetFunction.Match("LVL", ws.Range("A1:A1000"), 0)
lRow
на самом деле не изменится, если "LVL"
не найден, как если бы Match не удался, выполнение выдает ошибку в этой строке (которую вы резюме рядом с). Если вы хотите, чтобы lRow
было нулем, когда ничего не найдено, установите его на ноль, прежде чем использовать функцию Match:
On Error Resume Next
lRow = 0
lRow = Application.WorksheetFunction.Match("LVL", ws.Range("A1:A1000"), 0)
В качестве альтернативы рассмотрите возможность использования Application.Match
вместо этого и перехвата с помощью IsError
:
'On Error Resume Next <-no need for this
lRow = Application.Match("LVL", ws.Range("A1:A1000"), 0)
If IsError(lRow) then lRow = 0