Использование VLookup в VBA для получения названия компании? - PullRequest
0 голосов
/ 06 декабря 2018

В настоящее время я разрабатываю макрос, который автоматически заполняет таблицу в Excel из раскрывающегося списка.В основном на одном листе есть таблица из 200 компаний.Здесь есть поле с именем Manager (для людей, которые присматривают за компанией), которое содержит раскрывающийся список со всеми 12 возможными именами менеджеров.Когда я выбираю менеджера, он заполняет название компании в соответствующем разделе таблицы.

Единственная проблема заключается в том, что я пытаюсь использовать VLookup в VBA для получения названия компании.Так, например, если я выбираю менеджера из строки 123, я хочу присвоить название компании в столбце «C» переменной companyName (которая затем вставляется в автоматически заполняющуюся таблицу.

Вот мой код VLookup:

companyName = Application.WorksheetFunction.VLookup(ActiveCell.Address, Sheets("Companies").Range("C8:K208"), 1, False)

Я видел несколько разных способов сделать VLookups, и я нахожу их довольно запутанными. Всякий раз, когда он пытается выполнить поиск, он просто говорит« Ошибка времени выполнения 1004: невозможно получить свойство VLookup класса WorksheetFunction ».

Любая помощь по поводу того, что здесь происходит, будет очень цениться. Прошло около 6 лет с тех пор, как япоследний раз смотрел на Visual Basic в любом виде, и я не работал с макросами Excel так долго - так что извините, если я упускаю что-то слепое очевидное!

1 Ответ

0 голосов
/ 06 декабря 2018

Из VBA: Lookup_value - это значение, которое нужно найти в первом столбце массива.Lookup_value может быть значением, ссылка или текстовой строкой.

Ссылаясь на часть reference , которую вы явно пытаетесь использовать: в VBA ссылка являетсяActiveCell, .range("A5") или .cells(1, 2) НЕ адрес, как в Excel A1 или B7 и т. Д.

companyName = Application.WorksheetFunction.VLookup(ActiveCell, _
Sheets("Companies").Range("C8:K208"), 1, False)

или (по крайней мере, в моей версии 2003 года)

companyName = Application.VLookup(ActiveCell, _
Sheets("Companies").Range("C8:K208"), 1, False)

Но я бы по-прежнему не играл с ActiveCell.

...