【问题标题】:VLookup Loop not workingVLookup 循环不起作用
【发布时间】:2015-10-06 06:11:10
【问题描述】:

我正在尝试 VLookup,直到 A 列中的单元格为空并且它不工作并返回运行时错误“1004”无法获取 WorksheetFunction 类的 VLookup 属性。有什么帮助吗?或者有没有更好的循环可以使用。

Sub FindOldValue()
Dim oldvalue As String
Dim result As String
i = 2
j = 1
K = 2
l = 3

Do

oldvalue = Worksheets("Products").Cells(i, j) & Worksheets("Products").Cells(i, K) & "delete"
result = Application.WorksheetFunction.VLookup(oldvalue, Worksheets("Raw Delta").Range("A:H"), 7, 0)
Worksheets("Products").Cells(i, l) = result
i = i + 1
j = j + 1
K = K + 1

Loop Until Worksheets("Products").Cells(i, 1) = ""

End Sub

【问题讨论】:

  • 为什么不用公式来完成这个简单的任务?
  • 试过了。但是因为它是一个大文件,并且它需要一些时间来循环仅 200 个项目。如果它是 1000 还可以吗。哈哈
  • 这是什么版本的 Excel(2007、2013 等)?另外,编写自己的查找函数是否可以接受?只需几行代码,您就可以创建一个函数来执行此操作。
  • 1000 不是很多。您可以在没有循环的情况下批量更改 FormulaR1C1。

标签: vba excel vlookup


【解决方案1】:

您是否尝试过仅在该行中使用 Application.Vlookup 而不是 Application.Worksheetfunction.vlookup

result = Application.WorksheetFunction.VLookup(oldvalue, Worksheets("Raw Delta").Range("A:H"), 7, 0)

?

把循环改成这样怎么样?

Do

oldvalue = Worksheets("Products").Cells(i, j) & Worksheets("Products").Cells(i, K) & "delete"
resultrow = Application.Match(oldvalue, Worksheets("Raw Delta").Columns(1), 0)
If Not IsError(resultrow) Then
    Worksheets("Products").Cells(i, l) = Worksheets("Raw Delta").Cells(resultrow,7).Value
End If
i = i + 1
j = j + 1
K = K + 1

Loop Until Worksheets("Products").Cells(i, 1) = ""

【讨论】:

  • 试过了,但是太慢了
  • 仍然有同样的问题
  • 您是否使用Application.ScreenUpdating = False 来加快速度? (和Application.ScreenUpdating = True 完成后)
猜你喜欢
  • 2016-10-10
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 2019-01-23
  • 2012-03-30
  • 2011-10-19
  • 2016-03-04
  • 2012-07-02
相关资源
最近更新 更多