【问题标题】:message box when duplicates found发现重复项时的消息框
【发布时间】:2016-04-05 21:34:21
【问题描述】:

我正在尝试让宏在 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

我的问题是消息框不断弹出(我必须杀死 excel 才能摆脱 msgbox),即使只找到 1 个重复值,是因为它在循环内吗?一旦宏找到所有重复项,我只想让 msgbox 消失...

谢谢

【问题讨论】:

    标签: excel vba macros


    【解决方案1】:

    这将为在活动工作表的“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
    

    【讨论】:

      【解决方案2】:

      基本上,当它找到重复项时,您不会偏移活动单元格。你的 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
      

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

      【讨论】:

        【解决方案3】:

        使用标志来确定是否存在任何重复值。如果发现重复值,那么您也必须退出第一个 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
        

        【讨论】:

          猜你喜欢
          • 2017-11-21
          • 1970-01-01
          • 2018-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-26
          相关资源
          最近更新 更多