如果Font.Color不是黑色则删除单元格

时间:2017-10-30 10:18:33

标签: excel vba excel-vba

我遇到了一个我无法理解的问题,这是脚本:

Sub WorksheetLoop()

   Dim WS_Count As Integer
   Dim I As Integer
   Dim ws As String
   Dim sht As Worksheet

   ' Set WS_Count equal to the number of worksheets in the active
   ' workbook.
   WS_Count = ActiveWorkbook.Worksheets.Count
   ws = ActiveSheet.Name

   ' Begin the loop.
   For I = 1 To WS_Count

        For Each sht In ActiveWorkbook.Worksheets
            ws = Worksheets(I).Name
            Dim x As Range
            Set x = Worksheets(I).UsedRange
            x.ClearComments

            x.Replace What:="*€£$*", Replacement:=""

            For Each Cell In Worksheets(I).UsedRange
                If x.Font.Color <> Black Then
                    x.Delete
                End If
            Next
        Next sht

   Next I

End Sub

所有代码都适用于:

For Each Cell In Worksheets(I).UsedRange
    If x.Font.Color <> Black Then
          x.Delete
    End If
Next

我已经尝试将此更改为等于黑色,这仍然无法正常工作。我已尝试逐步完成,它从未找到符合删除单元格的单元格。

4 个答案:

答案 0 :(得分:1)

您需要在循环中引用Cell。像这样:

For Each Cell In Worksheets(I).UsedRange
    If Cell.Font.Color <> vbBlack Then
          Cell.Delete
    End If
Next

答案 1 :(得分:0)

您无法直接在VBA中引用颜色。相反,您需要使用他们的数字引用。由于黑色为0,您的代码应该看起来像这样

For Each x In Worksheets(I).UsedRange
    If x.Font.Color = 0 Then
          x.Delete
    End If
Next

我还将For Each Cell更改为x,因为这是您在代码中定义的变量。在这种情况下,您想测试单元格是否等于黑色,而不是等于

答案 2 :(得分:0)

在循环For Each Cell In Worksheets(I).UsedRange中,您使用CellRange对象)循环浏览范围,然后检查If x.Font.Color <> Black Then而不是{{1} }。

此外,If Cell.Font.Color <> Black Then会返回一个数字值,它应与Cell.Font.Color进行对比而不是vbBlack

修改后的代码

Black

答案 3 :(得分:0)

不要使用Cell.Delete,因为您会认识到,您的VBA会复制一个单元而不是一个非黑色单元。 这是一个删除和复制。 您必须使用Cell.ClearContents。 它将被删除,单元格内容!