2017-07-11 147 views
0

我正在处理大量的数据,其中我的工作簿包含多个数据表,并且我希望使用从工作表“SAP”中获取的工作表“URR”中的列查找相关数据拉”。因此,由于SAP Pull是包含所有数据的主表,并且URR包含具有相关数据的列,因此将该列的相关数据复制到SAP Pull并尝试写入查找循环以找到列的每一行的相应数据。问题是我不断收到一个错误,称为对象__工作表的方法'范围'失败。这是我的代码,因为我很困惑,为什么我不断收到这个问题。VBA Vlookup循环问题

Dim wsThis As Worksheet 
Dim aCell As Range 

Sheets("URR").Columns(1).copy Destination:=Sheets("SAP Pull").Columns(22) 
Set wsThis = Sheets("SAP Pull") 
    With wsThis 
     For Each aCell In .Range("V2:V") 
      .Cells(aCell.Row, 23) = Application.WorksheetFunction.VLookup(_ 
           aCell.Value, wsThat.Range("A2:D3500"), False) 
      Next aCell 
     End With 
End Sub 

回答

0

您错过了第三条标准,它告诉Excel您想要返回哪一列。

您还需要处理在wsThat.Range("A2:D3500")中找不到aCell.Value时的问题,它也会在未找到该值时停止您的代码。

您需要以某种方式捕获错误。

Dim wsThis As Worksheet 
Dim aCell As Range 

Sheets("URR").Columns(1).copy Destination:=Sheets("SAP Pull").Columns(22) 
Set wsThis = Sheets("SAP Pull") 
    With wsThis 
     For Each aCell In .Range("V2:V65000") 
      .Cells(aCell.Row, 23) = "Not Found" 
      On Error Resume Next 
      .Cells(aCell.Row, 23) = Application.WorksheetFunction.VLookup(_ 
           aCell.Value, wsThat.Range("A2:D3500"),4, False) 
      On Error Goto 0 
     Next aCell 
    End With 
End Sub 

这将使Not Found在每个小区中,并且如果该值在上述范围内发现它会把值从塔d在外地。

+0

谢谢!看起来第三个标准暂时让我失望了。此外,意识到wsThat在我的代码中不存在 - 用于切换工作表,但我只是将所有数据移动到一个工作表来解决该问题,现在是wsThis。不幸的是,这个错误在For Each aCell In .Range(“V2:V”)行中仍然存在,我不确定原因。任何额外的编辑会有所帮助!再次感谢。 – Shin

+0

@Shin见编辑。您可以将65000改为您的最大范围。 –

+0

嗨,是的,我明白这个问题,我希望V2:V会带我到整个列,直到下一行没有找到值,因为最大范围是可变的。此外,由于某种原因,vlookup在大约10个实例中返回'未找到',我不确定为什么,因为它们位于范围A2:D3500内。 – Shin

0

您在VlookUp中缺少声明。

.Cells(aCell.Row, 23) = Application.WorksheetFunction.VLookup(_ 
           aCell.Value, wsThat.Range("A2:D3500"),2, False) 

第三个声明是针对将要返回的列。