2016-05-19 4 views
0

Я написал программу, которая создает ресурс-обзор. В какой-то момент в программе я хочу установить vlookup-функцию через VBA. Если я установил функцию vlookup вручную на листе (напишите формулу в ячейку) (=SVERWEIS(B2;'MS Project'!A:H;2;FALSCH)) («SVERWEIS» - это немецкое слово для «VLOOKUP», «FALSCH» - немецкое слово для «FALSE»), он отлично работает , но если я использую следующую строку кода, чтобы автоматически вставить эту Формулу в ячейку, это не так.Excel 2013 VBA Ошибка Vlookup-функции

rngTarget.Cells(i, col + 1).value = WorksheetFunction.VLookup(rngTarget.Range("B" & i), _ 
ThisWorkbook.Worksheets("MS Project").Range("A1:H2000"), 2, 0) 

"rngTarget" представляет используемый диапазон активного листа.

«i» представляет текущую строку, с которой я работаю.

На рисунке ниже показана ошибка времени выполнения (1004), которую я получаю во время выполнения моей программы.

enter image description here

Он говорит, что ВПР-Достояние WorksheetFunction-объект не может быть назначен.

Редактировать: перед выполнением этой строки проверяется, существует ли найденный объект в «Проект Ms». Только если он существует, он установит функцию vlookup.

РЕШЕНИЕ: я понял проблему, я изменил:

rngTarget.Cells(i, col + 1).value = WorksheetFunction.VLookup(rngTarget.Range("B" & i), _ 
ThisWorkbook.Worksheets("MS Project").Range("A1:H2000"), 2, 0) 

к:

rngTarget.Cells(i, col + 1).value = Application.VLookup(rngTarget.Range("B" & i).value, _ 
ThisWorkbook.Worksheets("MS Project").Range("A1:H2000"), 2, 0) 

ответ

0

Для аргумента Lookup_Value вы ссылаетесь весь объект rngTarget.Range("B" & i), попробуйте добавить .Value2 вернуться только значение для этого диапазона.

т.е.

rngTarget.Cells(i, col + 1).value = WorksheetFunction.VLookup(rngTarget.Range("B" & i).Value2, _ 
ThisWorkbook.Worksheets("MS Project").Range("A1:H2000"), 2, 0) 
+0

Я также попробовал, что и раньше, это ничего не меняет. Но я позволю этому rngTarget.Range («B» & i). Значение. – flohdieter

+0

@flohdieter, пожалуйста, см. Небольшую поправку, попробуйте использовать '.Value2' – Carrosive

+0

ah okay, попробовал, все равно такая же ситуация. Спасибо за вашу помощь, я решил проблему, отредактировал мой вопрос! – flohdieter