我遇到了一个我无法理解的问题,这是脚本:
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
我已经尝试将此更改为等于黑色,这仍然无法正常工作。我已尝试逐步完成,它从未找到符合删除单元格的单元格。
答案 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
中,您使用Cell
(Range
对象)循环浏览范围,然后检查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。 它将被删除,单元格内容!