.在不同工作表上的数据集之间 VBA 中查找

.Find in VBA between Datasets on different Worksheets

Whosebug 的粉丝们,

我正在尝试将 .Find 与 VBA 一起使用,但不断收到一个相当烦人的错误。准确的说是错误424,object required.

正在努力学习,但现在已经为这个错误苦苦挣扎了 24 多个小时,似乎找不到我的错。我还在下面添加了一些屏幕截图,以便您自己查看数据。

截图说明:Screenshot1 是我的第一个数据集,我希望其中的 H 列由 Screenshot2 的 F 列填充,我的常见调用者位于第一个数据集中的 D 列和第二个数据集中的 B 列中。

我的问题摘要:出现错误 424,以下数据需要对象。请帮我找出我做错了什么,因为我想从中吸取教训,现在已经为这个错误苦苦挣扎了 24 多个小时。

Dim sht As Worksheet, sht2 As Worksheet
Set sht = Sheets("16-Compliancy-Rebuild")
Set sht2 = Sheets("OpmerkingBackup")
Dim Dept_Row As Long
Dim Dept_Clm As Long
Dim rng As Range
Table1 = sht.Range("D85:D750")
Table2 = sht2.Range("B3:B750")
Dept_Row = sht.Range("H85").Row
Dept_Clm = sht.Range("H85").Column
For Each cl In Table1
Set rng = Table2.Find(cl, SearchDirection:=xlPrevious, LookAt:=xlWhole)
If Not rng Is Nothing Then
    sht.Cells(Dept_Row, Dept_Clm) = sht2.Cells(rng.Row, 6).Value
End If
  Dept_Row = Dept_Row + 1
Next cl
End Sub

SJR 所述 - 您没有为表格使用 Set。 但是,一般来说,尝试编写您的代码,在顶部写 Option Explicit - 然后您应该被迫声明所有变量。

因此,您需要这样的东西:

Dim Table2 as Range
Dim Table1 as Range

然后,一旦将它们定义为范围,错误就会更加明显,并且会是 91:

Option Explicit    
Public Sub TestMe()        
    Dim Table1 As Range
    Table1 = Range("A1:A5")    
End Sub

通过添加 Set Table1 = Range("A1:A5")

修复错误 91