【发布时间】:2021-07-22 10:10:43
【问题描述】:
我是 VBA 的初学者,我正在尝试创建一个宏来检查 Sheet4 上特定列中的值是否与 Sheet3 上的匹配。如果有匹配项,我希望它从 D4 开始在 Sheet2 中放置“匹配”或“不匹配”,并在 D2:AC2 的每一列中显示错误计数。我编写的当前代码一直在运行,直到 excel 崩溃并且所有值都显示为“不匹配”,我不确定我做错了什么。
Sub ProductCheck()
Dim i, r As Integer
Dim LRow, LRow1 As Long
Dim found As Range
'Copies over all the product names currently set up on demo
Worksheets("Product Rec").Range("B4:AC5000").Clear
Sheets("Demo Product Report").Select
Range("A2:B5000").Copy
Sheets("Product Rec").Select
Range("B4").Select
ActiveSheet.Paste
'Checking if both products are in live and demo
LRow = Sheets(4).Range("A" & Rows.Count).End(xlUp).Row
LRow1 = Sheets(2).Range("B" & Rows.Count).End(xlUp).Row
For i = 2 To LRow
For r = 4 To LRow1
If Sheets(4).Range("A" & i).Value = Sheets(3).Range("A" & i).Value Then
Sheets(2).Range("D" & r).Value = "MATCH"
Else
Sheets(2).Range("D" & r).Value = "NO MATCH"
End If
Next r
Next i
有关更多信息,第一部分只是将设置的所有产品的名称复制到 sheet2 上的表格中,并且所有检查都放在产品的相应列中。 This is the output table
【问题讨论】:
-
VLOOKUP 没有帮助?
-
能否提供不含任何敏感信息的示例 excel?
-
很遗憾,我无法提供样本,我可以说第 3 和第 4 页上的列/行大约为 A1:AT5000 但可以每天更改,我不需要比较所有列,只需到 AC柱子。 VLOOKUP 可以,但产品数量每天都在变化,所以认为运行宏会更好
-
不是解决方案,而是注释:
Dim LRow, LRow1 As Long仅声明LRow1 As Long但LRow As Variant。在 VBA 中,您需要为 每个 变量指定一个类型,或者默认为Variant:Dim LRow As Long, LRow1 As Long。您还需要Dim i As Long, r As Long,因为您将它们与LRow一起使用,因此它们需要是相同的类型。 • 您可能会从阅读How to avoid using Select in Excel VBA 中受益。 -
哦,我明白了,请阅读它,感谢您的链接!