【发布时间】:2013-12-23 08:33:31
【问题描述】:
在 Excel 2007 中,我正在遍历工作表 2 中第 4 列的值。仍然在工作表 2 中,我想将我的 vlookup 公式的结果输出到第 5 列。vlookup 公式需要参考工作表 1,其中参考列是。为此,我有以下公式
Range("E2") = Application.WorksheetFunction.VLookup(Range("D2"), _
Worksheets("Sheet1").Range("A1:C65536"), 1, False)
问题,它返回错误代码 1004。我读到这是因为我需要在运行以下公式之前选择工作表 1:
ThisWorkbook.Worksheets("Sheet1").Select
但是搜索到的值 Range ("D2") 不属于 Sheet 1,并且在将 Sheet 1 带入视图后仍然返回代码 1004。
在这种情况下,引用不同工作表的正确方法是什么?
【问题讨论】:
-
你为什么要使用VBA来返回一个可以直接在
Worksheets("Sheet2").range("E2")中输入的公式的结果? -
我同意 Mark 的逻辑,所以我发布了一个替代您的代码的替代方案,它的作用完全相同。但是,如果您想坚持自己的逻辑,请尝试将
.Value添加到您的数组参数中。喜欢这个Application.WorksheetFunction.Vlookup(Range("D2"),Worksheets("Sheet1").Range("A1:C65536").Value, 1, False)。另外,您是否返回Column A中的值?您在Vlookup第三个参数中使用1,即col_index_num。 -
@Mark:这段代码包含在一个循环中,迭代几列,将结果输出到字符串变量中,我将在每行处理结束时将它们连接到最后一列。我只是简化了我的代码以避免在此处粘贴我的整个宏。
-
@L42:正如我向 Mark 提到的,我将结果输出到变量中; Range("E2") 实际上是 MyStringVar1,因为我有几个这样的变量/公式要落实到位。我尝试过使用 .value 但它使循环变慢并且仍然返回 1004。
-
是的,我添加了一些符合您逻辑的内容。此外,正如我在代码中评论的那样,如果找不到您的搜索,
Vlookup将失败并返回Runtime Error 1004。所以你必须使用代码中显示的Error Handlers来处理它。是的,无需添加.Value。