0

我正在尝试使用 VBA 在单元格中将 VLOOKUP 作为字符串编写。这意味着我不希望结果作为一个值出现在单元格中,而是我想要整个 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"). 我得到的问题非常有趣:

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

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

4

2 回答 2

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
于 2015-03-27T14:03:03.453 回答
0

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

其中任何一个都应该工作。

于 2015-03-27T14:20:00.690 回答