删除重复项正在影响另一个宏

Removing Duplicates is affecting another macro

我们 运行 工作表上有多个宏。其中之一用于删除重复项。

Sub Remove_Duplicates()
'
'
Application.ScreenUpdating = False

Call Convert_Text_To_Number

    Cells.Select
    ActiveSheet.Range("$A:$AE00").RemoveDuplicates Columns:=Array(10, 11, 12, 13, 14, 15, 16), Header:=xlYes
    ActiveWindow.SmallScroll Down:=6

Range("C" & Rows.Count).End(xlUp).Offset(1).Select

Application.ScreenUpdating = True

End Sub

我们将一组数据从一个工作表复制到我们的主工作簿中。这个"new"数据占用A2:Z*(我用星号是因为行数没有限制,每天都在增加数据)。当我们 运行 与另一个数据集进行比较时,我们会(手动)将新信息输入到每个完整行的列 AA:AE 中。一旦将日期插入到相应行的 AE 列中,就有一个代码可以将整行的文本颜色更改为绿色:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim r As Range
Set r = Target.EntireRow

    If Target.row = 1 Then Exit Sub 'don't change header color

    If r.Cells(1, "AD").Value <> "" Then
        r.Font.Color = RGB(0, 176, 80)
    Else
        r.Font.Color = RGB(0, 0, 0)
    End If

End Sub

(以上代码插入到工作簿的Sheet1对象中) 添加此代码后,每次我们 运行 Remove Duplicates 宏时,所有保留的唯一行现在都更改为绿色文本,但该行的 AE 列中没有日期。我确实发现,如果我转到该单元格,点击删除并转到另一个单元格,该行将恢复为黑色文本。谁能帮我确定是什么导致了这种情况发生?单元格中似乎插入了一个幻像值。

你认为Target是某个单独的单元格,但它不是。它可能 是单个单元格,但在删除重复项命令中,它更有可能是单元格行。您不能通过使用 Target.EntireRow 将一大群细胞视为单个细胞。

示例:Range("A2").EntireRow 不同于 Range("A2:AD50").EntireRow

以下应该为您指明正确的方向。

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rw As Long, rwRng As Range

    For Each rwRng In Target.Rows
        If rwRng.Row > 1 Then
            If Cells(rwRng.Row, 30).Value <> "" Then  'column AD is column 30
                rwRng.Font.Color = RGB(0, 176, 80)
            Else
                rwRng.Font.ColorIndex = xlAutomatic
            End If
        End If
    Next rwRng

End Sub