Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 发现重复项时的消息框_Excel_Vba_Macros - Fatal编程技术网

Excel 发现重复项时的消息框

Excel 发现重复项时的消息框,excel,vba,macros,Excel,Vba,Macros,我试图让宏在C列中找到重复条目,然后创建一个消息框,显示“找到重复值,请仔细检查”,下面是我的代码: Sub findduplicates() Range("C3").Select Do While ActiveCell.Value <> "" vtnaddress = ActiveCell.Address vtn = ActiveCell.Value Range("C3").Select Do

我试图让宏在C列中找到重复条目,然后创建一个消息框,显示“找到重复值,请仔细检查”,下面是我的代码:

Sub findduplicates()

    Range("C3").Select

    Do While ActiveCell.Value <> ""

        vtnaddress = ActiveCell.Address
        vtn = ActiveCell.Value

        Range("C3").Select

        Do Until ActiveCell.Address = vtnaddress
            If ActiveCell.Value = vtn Then
                MsgBox "Duplicate VTN found, please check again"
            Else
                ActiveCell.Offset(1, 0).Select
            End If
        Loop

        ActiveCell.Offset(1, 0).Select
    Loop
End Sub
子findduplicates()
范围(“C3”)。选择
当ActiveCell.Value“”时执行此操作
vtnadress=ActiveCell.Address
vtn=ActiveCell.Value
范围(“C3”)。选择
直到ActiveCell.Address=vtNadAddress时为止
如果ActiveCell.Value=vtn,则
MsgBox“发现重复的VTN,请再次检查”
其他的
ActiveCell.Offset(1,0)。选择
如果结束
环
ActiveCell.Offset(1,0)。选择
环
端接头
我的问题是,消息框不断弹出(我必须杀死excel以清除msgbox),即使只找到1个重复值,是否因为它在循环中?我只希望msgbox在宏找到所有重复项后消失


谢谢

基本上,当它找到一个重复单元时,您不会偏移活动单元。do-until循环不断地检查同一单元格。假设您只需要知道是否存在重复项,您可以通过添加“exit do”行进行修复,如下所示:

Sub findduplicates()

    Range("C3").Select

    Do While ActiveCell.Value <> ""

        vtnaddress = ActiveCell.Address
        vtn = ActiveCell.Value

        Range("C3").Select

        Do Until ActiveCell.Address = vtnaddress
            If ActiveCell.Value = vtn Then
                MsgBox "Duplicate VTN found, please check again"
                Exit Do
            Else
                ActiveCell.Offset(1, 0).Select
            End If
        Loop

        ActiveCell.Offset(1, 0).Select
    Loop
End Sub
子findduplicates()
范围(“C3”)。选择
当ActiveCell.Value“”时执行此操作
vtnadress=ActiveCell.Address
vtn=ActiveCell.Value
范围(“C3”)。选择
直到ActiveCell.Address=vtNadAddress时为止
如果ActiveCell.Value=vtn,则
MsgBox“发现重复的VTN,请再次检查”
退出Do
其他的
ActiveCell.Offset(1,0)。选择
如果结束
环
ActiveCell.Offset(1,0)。选择
环
端接头

这就是说,您可能还希望在MsgBox中显示找到重复项的位置…

基本上,当它找到重复项时,您不会偏移活动单元格。do-until循环不断地检查同一单元格。假设您只需要知道是否存在重复项,您可以通过添加“exit do”行进行修复,如下所示:

Sub findduplicates()

    Range("C3").Select

    Do While ActiveCell.Value <> ""

        vtnaddress = ActiveCell.Address
        vtn = ActiveCell.Value

        Range("C3").Select

        Do Until ActiveCell.Address = vtnaddress
            If ActiveCell.Value = vtn Then
                MsgBox "Duplicate VTN found, please check again"
                Exit Do
            Else
                ActiveCell.Offset(1, 0).Select
            End If
        Loop

        ActiveCell.Offset(1, 0).Select
    Loop
End Sub
子findduplicates()
范围(“C3”)。选择
当ActiveCell.Value“”时执行此操作
vtnadress=ActiveCell.Address
vtn=ActiveCell.Value
范围(“C3”)。选择
直到ActiveCell.Address=vtNadAddress时为止
如果ActiveCell.Value=vtn,则
MsgBox“发现重复的VTN,请再次检查”
退出Do
其他的
ActiveCell.Offset(1,0)。选择
如果结束
环
ActiveCell.Offset(1,0)。选择
环
端接头

也就是说,您可能还希望在MsgBox中显示找到重复项的位置…

使用标志来确定是否存在任何重复值。如果发现重复值,那么您还必须退出第一个Do While循环

Sub findduplicates()

    Dim flagDuplicate As Boolean
    Range("C3").Select

    Do While ActiveCell.Value <> ""
        If flagDuplicate Then
            Exit Do
        End If
        vtnaddress = ActiveCell.Address
        vtn = ActiveCell.Value

        Range("C3").Select

        Do Until ActiveCell.Address = vtnaddress
            If ActiveCell.Value = vtn Then
                MsgBox "Duplicate VTN found, please check again"
                foundDuplicate = True
                Exit Do
            Else
                ActiveCell.Offset(1, 0).Select
            End If
        Loop

        ActiveCell.Offset(1, 0).Select
    Loop
End Sub
子findduplicates()
Dim Flag复制为布尔值
范围(“C3”)。选择
当ActiveCell.Value“”时执行此操作
如果是,那么
退出Do
如果结束
vtnadress=ActiveCell.Address
vtn=ActiveCell.Value
范围(“C3”)。选择
直到ActiveCell.Address=vtNadAddress时为止
如果ActiveCell.Value=vtn,则
MsgBox“发现重复的VTN,请再次检查”
foundreplicate=True
退出Do
其他的
ActiveCell.Offset(1,0)。选择
如果结束
环
ActiveCell.Offset(1,0)。选择
环
端接头

使用标志确定是否存在任何重复值。如果发现重复值,那么您还必须退出第一个Do While循环

Sub findduplicates()

    Dim flagDuplicate As Boolean
    Range("C3").Select

    Do While ActiveCell.Value <> ""
        If flagDuplicate Then
            Exit Do
        End If
        vtnaddress = ActiveCell.Address
        vtn = ActiveCell.Value

        Range("C3").Select

        Do Until ActiveCell.Address = vtnaddress
            If ActiveCell.Value = vtn Then
                MsgBox "Duplicate VTN found, please check again"
                foundDuplicate = True
                Exit Do
            Else
                ActiveCell.Offset(1, 0).Select
            End If
        Loop

        ActiveCell.Offset(1, 0).Select
    Loop
End Sub
子findduplicates()
Dim Flag复制为布尔值
范围(“C3”)。选择
当ActiveCell.Value“”时执行此操作
如果是,那么
退出Do
如果结束
vtnadress=ActiveCell.Address
vtn=ActiveCell.Value
范围(“C3”)。选择
直到ActiveCell.Address=vtNadAddress时为止
如果ActiveCell.Value=vtn,则
MsgBox“发现重复的VTN,请再次检查”
foundreplicate=True
退出Do
其他的
ActiveCell.Offset(1,0)。选择
如果结束
环
ActiveCell.Offset(1,0)。选择
环
端接头

这将为在活动工作表的“C”列中发现的每个副本提示一条消息

Option Explicit

Sub FindDuplicates()
    Dim cell As Range

    With Intersect(ActiveSheet.Columns("C"), ActiveSheet.UsedRange)
        For Each cell In .Cells
            If WorksheetFunction.CountIf(.Resize(cell.Row - .Rows(1).Row + 1), cell.value) > 1 Then MsgBox "Duplicate '" & cell.value & "'  in " & cell.Address
        Next cell
    End With

End Sub

这将为活动工作表的“C”列中发现的每个重复项提示一条消息

Option Explicit

Sub FindDuplicates()
    Dim cell As Range

    With Intersect(ActiveSheet.Columns("C"), ActiveSheet.UsedRange)
        For Each cell In .Cells
            If WorksheetFunction.CountIf(.Resize(cell.Row - .Rows(1).Row + 1), cell.value) > 1 Then MsgBox "Duplicate '" & cell.value & "'  in " & cell.Address
        Next cell
    End With

End Sub