如果当*值*是指定的那个时,Not函数继续

我试图编写一个脚本,检查另一个工作表中的重复值,但我不能得到它的工作。 在线路problem ,If函数总是继续,无论是否设置为If NotIf 。 LocatedCell不等于Nothing。

我相信这是一个明显的错误,但我无法理解。

 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 

另外,我使用正确的查找? 它似乎也没有工作。

谨慎使用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将您的error handling程序返回到默认模式。


您的代码的一些问题:

1)在行If Not LocatedCell = "Nothing" Then你试图确定你的单元格是否不等于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 

4) ,当然还有: 如何避免使用Select / Active语句