2017-01-24 3 views
0

Я пытаюсь создать макрос, который включает в себя VLOOKUP, но файл VLOOKUP будет меняться каждый раз. Я хотел бы, чтобы ссылочный файл в VLOOKUP был переменной. В идеале макрос будет предлагать пользователю выбрать файл, из которого они хотят VLOOKUP. Пока у меня это есть, но он, похоже, не работает ... («тест» - это то, что назван листом).Повторное использование макроса VLOOKUP

Sub VLOOKUP() 

Application.ScreenUpdating = False 

Dim myFilename As String 

MsgBox "Please choose file with name to use in VLOOKUP formula.", vbOKOnly, "Choose file" 
myFilename = CStr(Application.GetOpenFilename) 

Range("M12").FormulaR1C1 = "=VLOOKUP(RC[-11],'[" & myFilename & "]test'!C9:C10,2,0)" 

End Sub 

Однако VLOOKUP в ячейке не показывает, как это должно быть. например

=VLOOKUP(B12,'[G:\OPS\National Pricing Data And Risk\Vehicle Pricing\VP Work\Gareth\Even Newer Toyota Macro Test\[Z401 Toyota Test COMPLETE.xlsx]test]Z401 Toyota Test COMPLETE.xlsx]'!$I:$J,2,0) 

Я не уверен, где дополнительный] Z401 Toyota Test COMPLETE.xlsx] откуда. Есть что-то, чего я не вижу/не делаю правильно?

Edit:

Sub VLOOKUP() 

Application.ScreenUpdating = False 

Dim fullPath As String 
Dim tmpName As String 
Dim tmpPath As String 
Dim myFilename As String 

fullPath = "G:\OPS\National Pricing Data And Risk\Calculators, Docs, Templates & Guides\Toyota Macros.xlsm" 
tmpName = fso.GetFileName(fullPath) 
tmpPath = fso.GetParentFolderName(fullPath) 
myFilename = tmpPath & "\[" & tmpName & "]" 

Range("M12").FormulaR1C1 = "=VLOOKUP(RC[-11],'[" & myFilename & "]test'!C9:C10,2,0)" 

End Sub 
+0

Что происходит в качестве 'myFilename' после того, как вы назначили его? В коде нет ничего, что показывало бы, почему это будет отображаться так. –

+0

Я ошибся в редактировании сообщения. Пожалуйста, отредактируйте и перепечатайте последнюю (ошибочную) формулу –

+0

Отредактировано и перепечатано – Gareth

ответ

1

Не ВПР в "зарезервированное слово" в Excel? Возможно, ваша функция не работает, потому что вы пытаетесь использовать функцию Excel, которая уже существует. Возможно, попробуйте назвать вашу функцию «MYVLOOKUP» и посмотреть, работает ли это.

Brian

+0

Он устанавливает эту строку как формулу ячейки – ashbygeek

1

Excel не нравится, как вы отформатировали имя файла. Вы должны разделить его в папку и name.ext, так что вы можете отформатировать его, как это: 'c:\path\to\file\[filename.ext]worksheetName'!F1

Редактировать

Я забыл, что это не так просто в VBA, как в других языках. Самый простой способ - использовать FileSystemObject, но использовать его сначала для его ссылки. Вы можете увидеть инструкции по добавлению ссылки в этом ответе stackoverflow: https://stackoverflow.com/a/1755577/2295754.

И вот пример использования FileSystemObject, если вам нужно немного больше указаний, чем дал другой ответ stackoverflow.

Dim fso As New FileSystemObject 

fullPath = "D:\Ashby\Documents\test2.xlsx" 
tmpName = fso.GetFileName(fullPath) 
tmpPath = fso.GetParentFolderName(fullPath) 
myFilename = tmpPath & "\[" & tmpName & "]" 

Edit2

Итак, я преднамеренно не фактическое использование MyFileName последний раз в надежде, что ты выберешь, что на свой собственный. Ну, вот он:

Range("M12").FormulaR1C1 = "=VLOOKUP(RC[-11],'" & myFilename & "test'!C9:C10,2,0)" 
+0

Я являюсь новичком, которым я являюсь ... как вы это делаете? Нужно ли мне создать новую переменную с именем «directory» и назначить ей что-то, а затем добавить ее с именем файла? – Gareth

+0

Отредактировано сообщение, которое ответит на ваш вопрос – ashbygeek

+0

Спасибо, я пробовал это с этим, но я не уверен, что у меня все получилось. Я добавил его в открытую почту, вы можете увидеть, где я испортился? – Gareth

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