我有两张工作表,第1张和第2张。
在表1中,我创建了一个表单,允许用户在单元格B21,B26,I21,I26,P21,P26中输入值。
然后通过单击“提交”,数据将插入到下一个可用行的A,B,C,D,E和F列中的工作表2上。
我也在尝试创建一个曾经运行过的宏,它将删除第2页上的值与sheet1上的值匹配的行。
目前我通过使用IF语句保持简单,但这给了我一个类型不匹配错误。
Sub QuickCull()
If Sheets(1).Range("B21").Value = Sheets(2).Range("A:A").Value And _
Sheets(1).Range("B26").Value = Sheets(2).Range("B:B").Value And _
Sheets(1).Range("P21").Value = Sheets(2).Range("C:C").Value And _
Sheets(1).Range("I21").Value = Sheets(2).Range("D:D").Value And _
Sheets(1).Range("I26").Value = Sheets(2).Range("E:E").Value And _
Sheets(1).Range("P26").Value = Sheets(2).Range("F:F").Value Then
Rows(ActiveCell.Row).EntireRow.Delete
End If
End Sub
请有人告诉我我哪里出错了吗?
答案 0 :(得分:1)
首先,您需要查看是否满足第一个条件,因此我们将使用Sheets(2)
函数在Match
中的整个A列中查找Range(“B21”)中的值。如果它返回成功匹配,我们将使用该结果(RowMatch
表示行号)。
其次,我们需要检查If
中RowMatch
中所有其他Sheets(2)
是否具有匹配值。如果是,那么我们可以删除Sheets(2)
中的那一行。
尝试以下代码:
Option Explicit
Sub QuickCull()
Dim RowMatch As Long
With Sheets(2)
If Not IsError(Application.Match(Sheets(1).Range("B21").Value, .Range("A:A"), 0)) Then
RowMatch = Application.Match(Sheets(1).Range("B21").Value, .Range("A:A"), 0)
If Sheets(1).Range("B26").Value = .Range("B" & RowMatch).Value And _
Sheets(1).Range("P21").Value = .Range("C" & RowMatch).Value And _
Sheets(1).Range("I21").Value = .Range("D" & RowMatch).Value And _
Sheets(1).Range("I26").Value = .Range("E" & RowMatch).Value And _
Sheets(1).Range("P26").Value = .Range("F" & RowMatch).Value Then
.Rows(RowMatch).Delete
End If
End If
End With
End Sub