在 Excel VBA 中,为什么删除范围内的重复条目会删除单元格背景颜色?

In Excel VBA, why removing duplicate entries in a range removes the cell background color?

我的工作表的所有单元格都是灰色的。我在列中选择一个范围并删除重复项。它会按预期删除重复项,但也会将重复单元格的颜色设置为其默认的白色。我尝试了多个示例,但看起来它们是用默认的白色完成的,而且这个问题可能永远不会发生。我可以通过编程将颜色设置回原来的颜色,但在知道为什么会这样之前我不想这样做。以下是我的代码

LastRow = GetLastRow(SheetName, ConsolidatedColumn) 'ConsolidatedColumn is "P"
WS.Range(ConsolidatedColumn & "1:" & ConsolidatedColumn & LastRow) _
    .RemoveDuplicates Columns:=Array(1), Header:=xlYes

有人可以解释为什么会这样吗?

试试这个

With Worksheets(SheetName).Range(ConsolidatedColumn & "1:" & ConsolidatedColumn & LastRow)
    .RemoveDuplicates Columns:=Array(1), Header:=xlYes
    .Resize(1, 1).Copy
    .PasteSpecial xlPasteFormats
End With

除此之外,我添加了一些(可能)有用的关于 RemoveDuplicates() 方法

功能的旁注

它似乎没有 delete&shift 行,只是 shift 它们 至少这是我通过以下测试得出的结论

测试 1:

With Worksheets(SheetName).Range(ConsolidatedColumn & "1:" & ConsolidatedColumn & LastRow)
    MsgBox .Address
    .RemoveDuplicates Columns:=Array(1), Header:=xlYes
    MsgBox .Address
    .Resize(1, 1).Copy
    .PasteSpecial xlPasteFormats
End With

从两个 MsgBox 语句中获得相同范围地址的地方

最后两个语句将格式扩展到整个原始范围

测试2:

With Worksheets(SheetName).Range(ConsolidatedColumn & "1:" & ConsolidatedColumn & LastRow)
    MsgBox .Address
    .Rows(2).Delete
    MsgBox .Address
    .Resize(1, 1).Copy
    .PasteSpecial xlPasteFormats
End With

你从两个 MsgBox 语句中得到不同的范围地址,第二个比第一个短一行

因此,最后两个语句不会将格式扩展到整个 原始 范围