.在不同工作表上的数据集之间 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
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")