将VLOOKUP写为单元格中的字符串,并通过GetoOpenfilename检索动态路径

时间:2015-03-27 12:18:03

标签: vba vlookup getopenfilename

我正在尝试使用VBA将单元格中的VLOOKUP作为字符串写入。这意味着我不希望结果作为值出现在单元格中,但我想要整个VLOOKUP表达式(对于此示例:"VLOOKUP(C6,'[path_to_file.xlsm]OTD Table!$B:$F,4,0)")。挑战是VLOOKUP的范围参数是串联用户使用GetOpenFilename选择的路径(path_to_file.xlsm),以及指定查找表所在的选项卡的字符串("OTD Table!$B:$F,4,0"). 我得到的问题非常有趣:

当我在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

我希望你们其中一个人能够理解这一点!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

是的,您需要设置字符串以添加单引号,或者您需要将单元格的数字格式更改为文本(Cells(1,10).NumberFormat =“@”)

其中任何一个都应该有用。