繁体   English   中英

更改单元格颜色时下标超出范围错误

[英]Subscript out of range error when changing cell color

嗨,我是 vba 的新手,我可能并没有真正理解其中的大部分内容,但是我无法解释为什么我会在代码应该更改单元格的背景颜色时收到“运行时错误 9:下标超出范围”错误到另一个

 Sub CompareWorksheets(ws1 As Worksheet, ws2 As Worksheet)
    Dim r As Long, c As Integer
    Dim lr1 As Long, lr2 As Long, lc1 As Integer, lc2 As Integer
    Dim maxR As Long, maxC As Integer, cf1 As String, cf2 As String
    Dim DiffCount As Long
    Application.ScreenUpdating = False
    With ws1.UsedRange
        lr1 = .Rows.Count
        lc1 = .Columns.Count
    End With
    With ws2.UsedRange
        lr2 = .Rows.Count
        lc2 = .Columns.Count
    End With
    maxR = lr1
    maxC = lc1
    If maxR < lr2 Then maxR = lr2
    If maxC < lc2 Then maxC = lc2
    DiffCount = 0
    For c = 1 To maxC
        For r = 1 To maxR
            cf1 = ""
            cf2 = ""
            On Error Resume Next
            cf1 = ws1.Cells(r, c).FormulaLocal
            cf2 = ws2.Cells(r, c).FormulaLocal
            On Error GoTo 0
            If cf1 <> cf2 Then
                DiffCount = DiffCount + 1
                ws1.Cells(r, c).Activate
                ws1.Cells(r, c).Select
 =============> ws1.Cells(r, c).Interior.ColorIndex = RGB(200, 20, 20) <============
                End If
            Next r
        Next c
        Application.ScreenUpdating = True
    End Sub

Cell.Interior.ColorIndex不是一个RGB值,而是一个枚举值。
可能的值为:

  • xlColorIndexAutomatic表示自动颜色
  • xlColorIndexNone表示没有颜色

这就是您无法成功将其设置为RGB值的原因。

要将背景颜色设置为RGB颜色,请改用Interior.Color属性。

我发现在 RGB(#,#,#) 中使用带有&H标签的Interior.Color也可以。

例子:

RGB = 192 0 0 ------- 十六进制 = #C00000 ------ RGB(&HC0, &H0, &H0)
RGB = 84 130 53 ---- 十六进制 = #548235 ------ RGB(&H54, &H82, &H35)

Range("C1").Interior.Color = RGB(&HC0, &H0, &H0)
Range("C1").Interior.Color = RGB(&H54, &H82, &H35)

Cells(1, 3).Interior.Color = RGB(&HC0, &H0, &H0)
Cells(1, 3).Interior.Color = RGB(&H54, &H82, &H35)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM