2015-03-27 2 views
0

Я пытаюсь написать VLOOKUP в ячейке в виде строки с VBA. Это означает, что я не хочу, чтобы результат отображался в ячейке в качестве значения, но я хочу вместо этого использовать все выражение VLOOKUP (для этого примера: "VLOOKUP(C6,'[path_to_file.xlsm]OTD Table!$B:$F,4,0)"). Задача состоит в том, что аргумент диапазона VLOOKUP представляет собой конкатенацию пути (path_to_file.xlsm) что пользователь выбирает с GetOpenFilename, и строкой, которая определяет вкладку, в которой таблица поиска находится ("OTD Table!$B:$F,4,0"). вопроса я получаю очень интересно:Напишите VLOOKUP как строку в ячейке с динамическим путем, полученным через GetoOpenfilename

Когда я печатаю мое выражение в MsgBox, выражение корректно отображается Однако, когда я пишу его в ячейке, путь таинственным образом отображается неправильно.

Sub macro() 

dim data_file_new as String 

data_file_new = CStr(Application.GetOpenFilename(FileFilter:="Excel Workbooks (*.xls*),*.xls*", Title:="Select new data file")) ' The user selects the file 
str_ = "=VLOOKUP(C6," & "'[" & data_file_new & "]OTD Table!$B:$F,4,0)" ' This will display the expression correctly 

cells(1,10)="=VLOOKUP(C6," & "'[" & data_file_new & "]OTD Table!$B:$F,4,0)"' This will not display the same thing as in the messagebox above 

end Sub 

Надеюсь, один из вас, ребята, сможет это понять!

+0

Вы пытались поместить свою строку во временную переменную и поместить ее в ячейку? – R3uK

+0

Можете ли вы вставить те различия, которые вы видите? – izzymo

+0

Просто добавьте '(одинарная кавычка перед знаком равенства), как "' = VLOOKUP ( – Arya

ответ

1

Поскольку вы отбрасываете формулу в ячейку, которую хотите отобразить как прямой текст, вы должны быть явным с Excel и пометить текстовую строку, чтобы не интерпретировать ее как формулу. Самый простой способ сделать это - предварительно подставить строку с помощью одной кавычки «».

Sub macro() 
    Dim data_file_new, str_ As String 

    str_ = "'=VLOOKUP(C6,'[" 
    data_file_new = CStr(Application.GetOpenFilename(FileFilter:="Excel Workbooks (*.xls*),*.xls*", Title:="Select new data file")) ' The user selects the file 
    str_ = str_ & data_file_new & "]OTD Table!$B:$F,4,0)" ' This will display the expression correctly 

    ActiveSheet.Cells(1, 10).Value = str_ 
End Sub 
+0

Эй, это работает, спасибо, ребята! – Vsamfh

0

Да либо вам нужно установить строку, чтобы добавить апостроф, или вам необходимо изменить NumberFormat ячейки в текст (Cells (1,10) .NumberFormat = «@»)

Любой из них должен работать.