【问题标题】:vba vlookup does not work in loopvba vlookup 不能循环工作
【发布时间】:2016-10-10 01:38:45
【问题描述】:

我正在开发一种分析数据的工具。要分析的数据被手动复制到第一张表中,然后我计划运行一个宏,将数据分析到第二张表中。我需要每个条目的一个属性的 vlookup 函数:

Worksheets("x1").Cells(z, 4).Value = Application.WorksheetFunction.VLookup(Worksheets("x1").Cells(z, 2).Value, Worksheets("x2").Range("$A$1:$B$23"), 2, False)

显然 z 是指示当前行的变量(我确实在“for”循环中复制了大约 700 行数据)。

每当我尝试执行整个子程序时,它都会返回运行时错误(1004)。奇怪的是,每当我使用单个步骤执行宏时,它都可以正常工作。

有人知道这里发生了什么吗?

提前致谢

【问题讨论】:

  • Range 中删除$ 符号,使其显示为:Worksheets("x1").Cells(z, 4).Value = Application.WorksheetFunction.VLookup(Worksheets("x1").Cells(z, 2).Value, Worksheets("x2").Range("A1:B23"), 2, False)
  • 这并不能解决问题。
  • 您是否单步浏览了整个 700 行数据?尝试编写一个错误处理程序(在错误 goto 上)并查看它在哪一行失败。
  • 我解决了这个问题。运行时错误是由从 vlookup 列中选择值的草率公式引起的。这可能是代码在没有 vlookup 的情况下工作的原因。感谢您向我介绍错误处理的概念。

标签: excel vba loops macros vlookup


【解决方案1】:

这里有一些示例错误处理代码可以帮助您进行操作。

Sub TestVLookup()

    On Error GoTo ErrHandler
    For Z = 1 To 700
        Worksheets("x1").Cells(Z, 4).Value = Application.WorksheetFunction.VLookup(Worksheets("x1").Cells(Z, 2).Value, Worksheets("x2").Range("$A$1:$B$23"), 2, False)
    Next Z

Exit Sub

ErrHandler:
    Debug.Print "Z: " + CStr(Z) + "|" + CStr(Err.Number) + ": " + Err.Description

End Sub

【讨论】:

  • 我解决了这个问题。运行时错误是由工作表不同部分中的一个草率公式引起的,该公式从 vlookup 列中选择一个值。这可能是代码在没有 vlookup 的情况下工作的原因。感谢您向我介绍错误处理的概念。
  • @Maverick13 如果您不了解错误处理,您还应该看看 view -> immediate window / local and setting debug points :)
猜你喜欢
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
相关资源
最近更新 更多