簡體   English   中英

VBA VLookup出現問題

[英]Trouble With VBA VLookup

我在使用下面的VLookup時遇到了麻煩,因為我將整個列范圍用作查找值。

Private Sub Worksheet_Activate()

Dim WsFk_Row As Long
Dim WsFk_Clm As Long

Table1 = Sheets("Requirements Update Format").Range("A:A")
Table2 = Sheets("Workstreams Link").Range("A:B")
Set WsFk_Row = Sheets("Requirements Insert Format").Range("I1").Row
Set WsFk_Clm = Sheets("Requirements Insert Format").Range("I1").Column


For Each cl In Table1
    Sheets("Requirements Insert Format").Cells(WsFk_Row, WsFk_Clm) = Application.WorksheetFunction.VLookup(cl, Table2, 2, False)
    WsFk_Row = WsFk_Row + 1
Next cl

End Sub

該代碼適當地填充了所有行,但是一旦完成,我將收到以下錯誤“無法獲取WorksheetFunction類的VLookup屬性”。 這使我相信以下幾行是我的問題開始的地方

Table1 = Sheets("Requirements Update Format").Range("A:A")

我嘗試通過如下修改該行來解決此問題,但是這完全阻止了該過程運行。

Table1 = Sheets("Requirements Update Format").Range(Range("A1"), Range("A1").End(xlDown).Select)

關於如何解決此問題的任何建議將不勝感激。

編輯為將“ VlookUp”替換為“ .Find”方法,並處理可能不匹配的問題

Dim WsFk_Row As Long, WsFk_Clm As Long
Dim found as Range
With Sheets("Requirements Update Format")

    Set Table1 = .Range("A1:A" & .Cells(.Rows.Count,1).End (xlUp).Row)

End With

Set Table2 = Sheets("Workstreams Link").Range("A:B")

WsFk_Row = Sheets("Requirements Insert Format").Range("I1").Row

WsFk_Clm = Sheets("Requirements Insert Format").Range("I1").Column


For Each cl In Table1
   Set found = Table2. Columns(1).Find (What:=cl.Value, LookAt:=xlWhole,  LookIn:=xlValues, MatchCase=True)
   If Not found is Nothing then Sht3.Cells(WsFk_Row, WsFk_Clm) =  found.Offset (,1)
   WsFk_Row = WsFk_Row + 1
Next cl

End Sub

我認為您在正確的軌道上。 嘗試以下方法...

Private Sub Worksheet_Activate()

Dim WsFk_Row As Long, WsFk_Clm As Long
Dim Sht1 As Worksheet, Sht2 As Worksheet, Sht3 As Worksheet
Dim Table1 As Range, Table2 As Range
Dim cl As Range
Dim lastRow As Long

Set Sht1 = Worksheets("Requirements Update Format")
Set Sht2 = Worksheets("Workstreams Link")
Set Sht3 = Worksheets("Requirements Insert Format")

lastRow = Sht1.Range("A" & Sht1.Rows.Count).End(xlUp).Row
Set Table1 = Sheets("Requirements Update Format").Range("A1:A" & lastRow)

lastRow = Sht2.Range("A" & Sht2.Rows.Count).End(xlUp).Row
Set Table2 = Sheets("Workstreams Link").Range("A1:B" & lastRow)

WsFk_Row = Sht3.Range("I1").Row
WsFk_Clm = Sht3.Range("I1").Column

For Each cl In Table1
    Sht3.Cells(WsFk_Row, WsFk_Clm) = Application.WorksheetFunction.VLookup(cl, Table2, 2, False)
    WsFk_Row = WsFk_Row + 1
Next cl

Set Sht1 = Nothing
Set Sht2 = Nothing
Set Sht3 = Nothing
Set Table1 = Nothing
Set Table2 = Nothing

End Sub

它這樣做:

  • 使用更多對象,以期提高可讀性
  • 更正了Set一些語法
  • 計算表的實際大小。 這樣可以防止cl循環超出可用范圍的范圍拍攝。
  • 最后清理對象-好的做法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM