2013-10-03 1 views
1

Часть макроса У меня обновляется соединение с SQL (которое запускает запрос для размещения двух столбцов данных на вкладке) и выполняет vlookup с данными (разные вкладки) в существующий столбец таблицы, созданной по запросу.VBA vlookup на столе, созданный Connection String

'Refreshing Connection named Query From Warehouse 
ActiveWorkbook.Connections("Query from Warehouse").Refresh 

Range("M2").Select 
ActiveCell.FormulaR1C1 = _ 
    "=IF(ISNA(VLOOKUP([@polid],RwlID,2,FALSE)),[@polid],VLOOKUP([@polid],RwlID,2,FALSE))" 

таблица создана по запросу был назван RwlID

Проблема у меня в том, что ВПР работает только для данных, которые уже в RwlID, чтобы начать с. Я подумал, что, возможно, это произошло, потому что оно двигалось до того, как соединение закончилось освежающим, поэтому я переместил две части кода по другую сторону от других запросов в макросе (это займет намного больше времени для запуска), но это не помогло.

Теперь я думаю, что Excel все еще считает, что RwlID имеет определенную длину. Так, например, вчера было 400 строк и теперь доходит до 450, мой поиск составляет только 400. (Только в Макро, как если бы я вручную вводил поиск снова после того, как макрос запустил ячейки, как я и ожидал)

так что я попытался добавить (RlwID в лист 5):

sheets(5).ListObjects(1).Name = "RwlID" 

Думая, что это может переименовать таблицу 450 в качестве RwlID в отличие от 400, но не был успешным.

Любые идеи, почему это не работает? Как это исправить?

Спасибо.

ответ

0

Проблема в том, что код продолжает в то время как запрос еще освежает, поэтому ВПР была выполнена до того, как данные для поиска. Исправление - отключить фоновое обновление: Data -> Connectons -> Properties -> untick 'enable background refresh'

0

Простейшее решение состоит в том, чтобы просто заставить формулу смотреть на большую часть таблицы, а не только на диапазон RwlID.

"=IF(ISNA(VLOOKUP([@polid],$A$2:$B$2000,2,FALSE)),[@polid],VLOOKUP([@polid],$A$2:$B$2000,2,FALSE))" 
+0

Я уже пробовал это, и он просто возвращал пробелы, так как формула поиска не вставлялась в предполагаемый столбец вообще. Диапазон («M2»). Выберите ActiveCell.FormulaR1C1 = _ "= IF (ISNA (VLOOKUP ([@ polid], RenewedFromPolID! $ A $ 2: $ B $ 10000,2, FALSE)), [@ polid], VLOOKUP ([@ polid], RenewedFromPolID! $ A $ 2: $ B $ 10000,2, FALSE)) RenewedFromPolID - это название вкладки, в которой находится таблица ... не уверен, есть ли что-то очевидное, что мне не хватает Вот? – user2842721

+0

Дополнительная информация по этому вопросу: а также выполнение vlookup в таблице, я попросил код скопировать его и вставить столбцы A и B (которые удерживают таблицу) в C и D. Это происходит после обновления соединения (в терминах времени выполнения кода, через минуту после, а обновление занимает секунды). Столбцы C и D показывают старую версию таблицы. – user2842721

+0

Отключение фона Refresh на соединении исправил мою проблему. Теперь я могу запустить мой оригинальный Vlookup. – user2842721