Forum Discussion
Col “B” values should be match with Three months
- Dec 11, 2020
Improving I still don't understand some of what you are doing and why so still hesitant to change too much but here is a simplified version of the macro that I believe gives correct results. NOTE that 2 cases appear to be wrong based on your VLOOKUP but your VLOOKUP doesn't extend to the bottom on the Oct 2020 page.
Sub Matching2() Dim row1, month3, month2, month1, Rating3, Rating2, Rating1, sku As String Dim ws As Worksheet Dim xa, xb, xc As Integer xa = 1 xc = Worksheets("Main").Cells(1, 5) Sheets("Main").Range("A:A").Clear For Each ws In Worksheets Sheets("Main").Cells(xa, 1) = ws.Name xa = xa + 1 Next ws Sheets("Main").Range("A2:C8").Sort Key1:=Sheets("Main").Range("B2"), Order1:=xlAscending, Header:=xlNo For xb = 4 To xc month3 = Worksheets("Main").Cells(xb, 3) month2 = Worksheets("Main").Cells(xb - 1, 3) month1 = Worksheets("Main").Cells(xb - 2, 3) For x = 2 To 800 If Worksheets(month3).Cells(x, 17) = "D" Then sku = Worksheets(month3).Cells(x, 2).Text If MatchFound(month2, sku, "D") And MatchFound(month1, sku, "D") Then Worksheets(month3).Cells(x, 18) = "Remove" Else End If Else End If Next x Next xb MsgBox ("Worksheets Updated") End Sub Function MatchFound(shtname, sku, val) As Boolean MatchFound = (Worksheets(shtname).Range("b:b").Find(What:=sku, LookIn:=xlValues).Offset(0, 15) = val) End Function
Improving I still don't understand some of what you are doing and why so still hesitant to change too much but here is a simplified version of the macro that I believe gives correct results. NOTE that 2 cases appear to be wrong based on your VLOOKUP but your VLOOKUP doesn't extend to the bottom on the Oct 2020 page.
Sub Matching2()
Dim row1, month3, month2, month1, Rating3, Rating2, Rating1, sku As String
Dim ws As Worksheet
Dim xa, xb, xc As Integer
xa = 1
xc = Worksheets("Main").Cells(1, 5)
Sheets("Main").Range("A:A").Clear
For Each ws In Worksheets
Sheets("Main").Cells(xa, 1) = ws.Name
xa = xa + 1
Next ws
Sheets("Main").Range("A2:C8").Sort Key1:=Sheets("Main").Range("B2"), Order1:=xlAscending, Header:=xlNo
For xb = 4 To xc
month3 = Worksheets("Main").Cells(xb, 3)
month2 = Worksheets("Main").Cells(xb - 1, 3)
month1 = Worksheets("Main").Cells(xb - 2, 3)
For x = 2 To 800
If Worksheets(month3).Cells(x, 17) = "D" Then
sku = Worksheets(month3).Cells(x, 2).Text
If MatchFound(month2, sku, "D") And MatchFound(month1, sku, "D") Then
Worksheets(month3).Cells(x, 18) = "Remove"
Else
End If
Else
End If
Next x
Next xb
MsgBox ("Worksheets Updated")
End Sub
Function MatchFound(shtname, sku, val) As Boolean
MatchFound = (Worksheets(shtname).Range("b:b").Find(What:=sku, LookIn:=xlValues).Offset(0, 15) = val)
End Function
mtarler Hi, sir,
I have been using your code where an error is occurred when it is applied to other sheets.
Error is Object variable or With block variable not set
- mtarlerDec 14, 2020Silver Contributor
Improvingmaybe you could give a little more detail. what do you mean by "applied to another sheets"? When the error occurs can you click debug and say exactly what line? can you include the workbook?
- ImprovingDec 14, 2020Copper Contributor
error comes from this line that goes yellow with the error mentioned in recent post
MatchFound = (Worksheets(shtname).Range("b:b").Find(What:=sku, LookIn:=xlValues).Offset(0, 15) = val)
- mtarlerDec 14, 2020Silver Contributor
Improving I took a shortcut, cutting and pasting the code you had. I don't know if this will fix it but try adding ActiveWorkbook. in front so it looks like this:
MatchFound = (ActiveWorkbook.Worksheets(shtname).Range("b:b").Find(What:=sku, LookIn:=xlValues).Offset(0, 15) = val)
not sure why it worked initially and then stopped working. But if it isn't the "Active" workbook (i.e. you are call this macro to run on a different book then that needs to be changed.