2013-07-18 2 views
0

У меня есть этот код:Проходят переменные в ВПР в VBA

currName = "string" 'unused 
cellNum = [VLOOKUP("string", '2012'!A:M, 13, FALSE)] 

Но мне нужно заменить "string" с переменной в коде VBA под названием currName. Я пробовал:

currName = "string" 'used 
cellNum = [VLOOKUP(currName, '2012'!A:M, 13, FALSE)] 

Какой синтаксис подходит? Когда я пытаюсь выполнить вторую часть с использованием переменной, которую я получаю, она возвращает недопустимые данные (например, если я ввожу ее обратно в ячейку, это #NAME?). currName просто равен «строка». Он отлично работает в первом примере без использования переменной.

+0

Адрес: Невозможно понять, что может быть неправильно (я могу думать о 3 или 4 предметах), не видя, как объявляются ваши переменные и т. Д. –

+0

@DavidZemens Added; это просто сложное задание. – JBurace

+0

См. Мой ответ ниже и прочитайте комментарии @ DougGlancy для объяснения причин неудачи вашего подхода, когда вы не используете строковый литерал в этой функции. –

ответ

3

Я не видел квадратные скобки, используемые таким образом раньше. Обычно это ярлык для объектов Range. Я могу реплицировать ваше состояние ошибки.

Вместо этого вы можете использовать что-то вроде этого. Оба присвоения для cellNum работают без ошибок:

Sub Test2() 
Dim wsFunc As WorksheetFunction: Set wsFunc = Application.WorksheetFunction 
Dim ws As Worksheet: Set ws = Sheets("Sheet1") 
Dim rngLook As Range: Set rngLook = ws.Range("A:M") 
Dim cellNum As Range 
Dim currName As String 

currName = "string" 'unused 

Set cellNum = ActiveCell 

cellNum = wsFunc.VLookup("string", rngLook, 2, False) 

cellNum = wsFunc.VLookup(currName, rngLook, 2, False) 

End Sub 
+1

FYI. Квадратные скобки на самом деле скорее являются ярлыками для функции VBA 'Evaluate'. Не работают в OP, потому что 'i' не оценивает ничего в формуле. +1 на ваш ответ. –

+0

@DougGlancy Я не видел никаких 'i' в формуле OP? –

+0

К сожалению, это было мое упрощенное тестирование. Я имел в виду переменную 'CurrName'. –

1

Используйте функцию Evaluate. Формула является сама строка, так что вы должны объединить все в строку:

cellNum = Evaluate("VLOOKUP(""" & currName & """, '2012'!A:M, 13, FALSE)") 
+1

Я не использую синтаксис '= VLOOKUP()', вы могли бы перевести это так, как я его использую? – JBurace

+0

Вы заметили результат того, что вы пытаетесь «строка»? –

+0

Но никакие ячейки на моем листе не имеют формул, и ваш код кажется, что он пытается вставить формулу в ячейку. Это не то, что я делаю. – JBurace

Смежные вопросы