【问题标题】:Excel VBA keeps turning cells blackExcel VBA 不断将单元格变为黑色
【发布时间】:2023-04-02 04:03:01
【问题描述】:

我已经编写了代码,所以如果单元格值大于 0.10,它会变成黄色。如果不是,它应该保持白色。细胞不是保持白色,而是变成黑色。我无法弄清楚它为什么这样做。

Sub moreThan10Percent()
For nRow = 2 To 1937
    For nColumn = 6 To 6
        If Cells(nRow, nColumn) >= 0.1 Then
            Cells(nRow, nColumn).Interior.ColorIndex = 6
            Else
            Cells(nRow, nColumn).Interior.Color = 1
        End If
    Next nColumn
Next nRow

结束子

【问题讨论】:

  • 将您的 if 更改为简单的 If Cells(nRow, nColumn) >= 0.1 Then Cells(nRow, nColumn).Interior.ColorIndex = 6 此外,您可以使用条件格式轻松完成此操作。这不是你的选择吗?
  • 你不希望它'保持白色'。您要删除所有填充颜色。而不是Cells(nRow, nColumn).Interior.Color = 1 使用Cells(nRow, nColumn).Interior.PATTERN = xlNone
  • Fernando - 我确实有这个选项,但我必须经常重新下载多个 Excel 工作表。所以我希望使用 VBA 来加快速度。
  • 对我来说,这在尝试从事件中重置 bgcolor 时有效:oEvent.CellBackColor = -1

标签: excel vba colors cell


【解决方案1】:

试试这个。我将您的检查器的大部分放入带有参数的单独子中。第一个子是您选择的名称,其他子是引用您要检查的单元格的不同方法的示例。接下来是循环遍历单元格并进行检查的主子程序,但没有嵌套的 for-next 循环。最后一个 sub 是对话的扩展,它创建了一个参考工作表,其中包含所有 Excel 索引颜色的表格。

这三个参数是:1) 要检查的单元格范围,2) 检查的阈值,以及 3) 要将单元格更改为的颜色。

使用参数突破到 sub 的原因是我也试图通过 Worksheet_Change 和 Workbook_SheetChange 事件来完成这项工作。这可以是 Excel UI 上常规条件格式的一个很好的扩展,但不受那组不稳定的控件的限制。当有人在某个单元格或单元格区域中键入某个值时,您可以让 Excel 做任何您力所能及的事情。

但是我以这种方式实现这些事件的方式需要使用 Intersect() 函数,而且我遇到了一些我不记得以前遇到过的奇怪错误。我会解决它们并用完整的代码报告。

Sub moreThan10Percent()
    checkValues Range(Cells(2, 6), Cells(1937, 6)), 0.1, 3
End Sub

Sub moreWays1()
    checkValues Range("F2:F1937"), 0.1, 6
End Sub

Sub moreWays2()
    checkValues Intersect(Range("F:F"), Range("2:1937")), 0.1, 6
End Sub

Sub moreWays3()
    checkValues Intersect(Columns(6).EntireColumn, Range(Rows(2).EntireRow, Rows(1937).EntireRow)), 0.1, 6
End Sub

Sub moreWays4()
    checkValues Intersect(Columns(6).EntireColumn, Range(Rows(2), Rows(1937).EntireRow)), 0.1, 6
End Sub

Sub checkValues(targetRange As Range, targetThreshold As Single, targetColor As Long)
    Dim targetCell As Range
    For Each targetCell In targetRange
        With targetCell
            If .value >= targetThreshold Then
                .Interior.ColorIndex = targetColor
            Else
                .Interior.ColorIndex = xlColorIndexNone
            End If
        End With
    Next
End Sub

Sub generateTableOfExcelColorIndexes()
    Dim cell As Range
    Dim i As Integer
    Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "COLORS"
    i = 0
    For Each cell In Range("A1:H7")
        i = i + 1
        With cell
            .HorizontalAlignment = xlCenter
            .value = i
            With cell.Interior
                .Pattern = xlSolid
                .ColorIndex = i
            End With
        End With
    Next
End Sub

【讨论】:

    猜你喜欢
    • 2013-06-04
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多