如果值*是*指定的那个,则Not函数继续运行

时间:2014-02-10 09:39:18

标签: excel vba excel-vba

我正在尝试编写一个脚本来检查另一个工作表中的重复值,但我无法让它工作。在第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吗?它似乎也不起作用。

1 个答案:

答案 0 :(得分:12)

明智地使用On Error Resume Next

不要将On Error Resume Next用于整个代码 - 它会隐藏所有错误。只有在真正需要时才使用它。

使用On Error Resume Next表示将代码告诉Shut UP并执行您想要的操作。在大多数情况下,它会做你想要的......关闭并执行......但是你将无法获得预期的结果或完全错误的结果,如下所示! (SiddharthRout©:)

enter image description here

更改

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

4),当然还有:How to avoid using Select/Active statements