【问题标题】:Excel VBA don't chage cell colorExcel VBA不改变单元格颜色
【发布时间】:2013-06-04 17:57:41
【问题描述】:

我需要了解为什么我的代码不能修改单元格的背景颜色(而且我不想使用条件格式)

Function myCheck(ToVerify As Range, RightValue As Range) As Boolean
    Dim rng1 As Range
    Dim rng2 As Range

    For Each rng1 In ToVerify.Cells
        For Each rng2 In RightValue.Cells       
            If (rng1.Value <> rng2.Value) Then
                rng1.Interior.Color = RGB(255, 0, 0)
                'rng1.Cells.Interior.Color = RGB(0, 255, 0)
                'rng1.Cells.Interior.ColorIndex = 10
                'rng1.Interior.ColorIndex = 10
            End If
        Next rng2
    Next rng1

    SignIfError = True

End Function

我已编写此代码来确定一行中的哪些单元格 (ToVerify) 与特定单元格 (RightValue) 的值不同。我需要让这些单元格可见,然后我想改变它们的背景颜色。问题是 Excel 不会更改此单元格的背景颜色。我确定单元格值满足 If 语句的条件。 IF 语句中被注释的行是我的其他尝试,但这些都不起作用。

我哪里做错了?

【问题讨论】:

  • RightValue 是否包含多个单元格?
  • Excel函数,包括VBA中定义的函数,只能返回值,不能修改颜色等单元格属性。 请参阅我的 answer 到超级用户的问题以获取解决方法。
  • @chuff,这仅适用于用户定义函数 (UDF),我猜这里的情况并非如此。
  • RightValue 包含单个单元格
  • 如果他将他的代码更改为 Sub 那么没问题,@Doug。

标签: excel vba colors background cell


【解决方案1】:

我将假设 RightValue 只是一个值,而不是它们的整个范围。在这种情况下,这可能会做你想做的事:

Sub myCheck(ToVerify As Range, RightValue As Variant)
Dim cell As Range

For Each cell In ToVerify.Cells
    If cell.Value <> RightValue Then
        cell.Interior.Color = RGB(255, 0, 0)
    'else make it white
    Else
        cell.Interior.Color = RGB(255, 255, 255)
    End If
Next cell
End Sub

请注意,我已将其从 Function 更改为 Sub。因为您似乎不需要返回值。最后我还去掉了 SignIfError = True ,因为只有Function 才需要。

你可以这样称呼它:

myCheck ActiveSheet.Range("A1:A5"), 3

如果您想使用单元格中的值调用 RightValue,您可以这样称呼它:

myCheck ActiveSheet.Range("A1:A5"), ActiveSheet.Range("B1").Value

【讨论】:

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