我正在尝试编写一个脚本来检查另一个工作表中的重复值,但我无法让它工作。在第problem
行,If函数始终继续,无论是If Not
还是If
。 LocationCell确实无所不能。
我确信这是一个明显的错误,但我无法理解。
Sub mailer_followuptest()
Application.ScreenUpdating = False
'Remove matching contacts data from last run
Dim wsDel As Worksheet
Application.DisplayAlerts = False
Err.Clear
On Error Resume Next
Set wsDel = Sheets("Matching Contacts")
wsDel.Delete
Dim mailerSheet As Worksheet
Set mailerSheet = Worksheets("Call data")
Set MatchingContacts = Sheets.Add
MatchingContacts.Name = "Matching Contacts"
Dim DesiredEntry As String
Dim CRMContacts As Worksheet
Set CRMContacts = Worksheets("CRM contacts")
CRMContacts.Select
Range("A1").Select
Do
ActiveCell.Offset(1, 0).Select
DesiredEntry = ActiveCell.Value
With Sheets(mailerSheet).Range("A:A")
Dim LocatedCell As Range
Set LocatedCell = .Find(What:=DesiredEntry, SearchOrder:=xlByRows, LookAt:=xlPart)
problem: If Not LocatedCell = "Nothing" Then
'With_
LocatedCell.EntireRow.Copy_
'.Interior.ColorIndex = 4 'green
'End With
MatchingContacts.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.Offset(1, 0).Select
End If
End With
CRMContacts.Select
Loop Until ActiveCell.Value = ""
Application.ScreenUpdating = True
End Sub
另外,我正确使用find吗?它似乎也不起作用。
答案 0 :(得分:12)
On Error Resume Next
。不要将On Error Resume Next
用于整个代码 - 它会隐藏所有错误。只有在真正需要时才使用它。
使用On Error Resume Next
表示将代码告诉Shut UP
并执行您想要的操作。在大多数情况下,它会做你想要的......关闭并执行......但是你将无法获得预期的结果或完全错误的结果,如下所示! (SiddharthRout©:)
更改
Err.Clear
On Error Resume Next
Set wsDel = Sheets("Matching Contacts")
wsDel.Delete
到
On Error Resume Next
Set wsDel = Sheets("Matching Contacts")
On Error GoTo 0
If Not wsDel Is Nothing Then wsDel.Delete
行On Error GoTo 0
会将您的错误处理程序返回到默认模式。
您的代码存在一些问题:
1)在第If Not LocatedCell = "Nothing" Then
行中,您尝试确定您的单元格 value 是否不等于 string “Nothing”是不正确的。
要检查.Find
函数是否返回任何单元格,请更改
If Not LocatedCell = "Nothing" Then
到
If Not LocatedCell Is Nothing Then
2)将With Sheets(mailerSheet).Range("A:A")
更改为With
mailerSheet.Range("A:A")
3)正如@SiddharthRout在下面的评论中提到的那样,
副本必须在粘贴特殊之前。如果您执行某些特定操作
,则Excel以清除剪贴板而闻名
如果您要更改内部颜色并复制行,请更改
'With_
LocatedCell.EntireRow.Copy_
'.Interior.ColorIndex = 4 'green
'End With
到
With LocatedCell.EntireRow
.Interior.ColorIndex = 4 'green
.Copy
End With