Здесь есть несколько проблем, которые я бы предложил изменить:
"Я продолжаю получать" Метод "Диапазон" объекта '_Global' не удалось ""
Проблема с вышеуказанным заключается в том, что вы установили переменную Range
с именем InfoOmArt
. Затем вы go и используете это как NamedRange
в выражении Range(..)
. Это неверно, поскольку ваша переменная уже сама по себе является Range
объектом. Так что измените:
Range("InfoOmArt")
на InfoOmArt
.
"Но не должно ли это работать, когда я указываю его с помощью таблиц (" InformationOmArter " ) .Range ("A1: B54"). Я пытался изменить его на InfoOmArt. Теперь в нем говорится о невозможности использования свойства VLookup в функции Worksheets? "
Нет, это не так не надо работать perse. Пока ваша переменная Abbr
содержит значение, которое NOT не может быть найдено в объекте Range
, она будет вызывать ошибку (на этот раз ошибка 1004).
Затем вы проходите через Range
объект, подобный этому:
For Each p In Range(Cells(1, 1), Cells(44, 2))
abbr = Cells(p.Row, 1).Value
Это в основном делает то же самое дважды. Range(Cells(1, 1), Cells(44, 1))
, делает l oop только один раз. И просто для будущих ссылок, может быть даже лучше вытащить эти значения в массив до l oop через память и не делать никаких обращений к ячейкам таблицы (что медленнее на больших диапазонах).
Вы также делаете много неявных ссылок на листы. Эти ссылки не содержат явного Worksheet
родителя и, таким образом, делают вызовы неявного ActiveSheet
.
И это то, чему вы должны научиться избегать. ActiveSheet
и Activate
вряд ли когда-либо понадобятся. Взгляните на эту старую ветку на SO, чтобы узнать, как этого избежать.
Мое последнее предложение - начать использовать Range.Find
.