В вашей конкретной реализации, одним из вариантов является изменение вашего цикла Do While ...
, чтобы он также проверял длину строки.Эта строка будет выглядеть примерно так:
Do While Mid(LookInHere, y, 1) <> "" And y < Len(LookInHere)
Эта модификация сообщает оператору, что она должна завершить цикл, когда итерационная переменная y
превышает длину оператора.
Другой вариантэто изменить его с цикла Do While
на цикл For
.Это выглядело бы примерно так:
For i = 1 to Len(LookInHere)
MsgBox Mid(LookInHere, i, 1)
'Input your logic here
Next i
Проблема в том, что каждая из этих версий относительно неэффективна, просматривая каждую букву в строке, выполняя вычисление.Рассмотрите возможность использования встроенных функций Excel.Instr
возвращает позицию символа или ноль, если он не найден.Например, Instr("Abcdef", "b")
вернет число 2, а Instr("Abcdef", "k")
вернет ноль.Вы можете заменить весь цикл этими двумя вызовами функций.
Z = Instr(LookInHere, "(")
y = Instr(LookInHere, ")")
If y = 0 Then y = Len(LookInHere)
Последнее замечание: если ваши шаблоны становятся все более и более сложными, рассмотрите возможность рассмотрения и реализации регулярных выражений.