VLOOKUP宏的可重用性

时间:2017-01-24 22:41:08

标签: excel vba

我正在尝试创建一个包含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没有显示它应该如何。 e.g。

=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丰田测试COMPLETE.xlsx]的来源。我有什么遗漏/没有正确做的事吗?

编辑:

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

2 个答案:

答案 0 :(得分:1)

Excel中的VLOOKUP不是“保留字”吗?您的功能可能无法正常工作,因为您正在尝试使用已存在的Excel功能。也许尝试调用你的函数“MYVLOOKUP”,看看是否有效。

布赖恩

答案 1 :(得分: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)"