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

发布于 2025-01-07 15:11:13 字数 1308 浏览 2 评论 0原文

嗨,我是 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

Hi i'm new to vba and i might not really undestand much of it, but i can't explain why i get a "Runtime error 9: Subscript out of range" error, when the code should change the background color of the cell to another

 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

拥抱没勇气 2025-01-14 15:11:13

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

  • xlColorIndexAutomatic 表示自动颜色
  • xlColorIndexNone 表示无颜色

这就是为什么您无法成功将其设置为 RGB 价值。

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

Cell.Interior.ColorIndex is not a RGB value, but an enum value.
Possible values are:

  • xlColorIndexAutomatic which means Automatic color
  • xlColorIndexNone which means No color

This is the reason for why you can't successfully set it to a RGB value.

To set the background color to a RGB color, use the Interior.Color property instead.

凹づ凸ル 2025-01-14 15:11:13

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

示例:

RGB = 192 0 0 ---------- 十六进制 = #C00000 ------ RGB(&HC0, &H0, &H0)

RGB = 84 130 53 ---- 十六进制 = #548235 ------ RGB(&H54, &H82, &H35)

范围("C1").Interior.Color = RGB(&HC0, &H0, &H0)

范围("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)

I discovered using Interior.Color with &H tag within RGB(#,#,#) works as well.

Example:

RGB = 192 0 0 ------- Hex = #C00000 ------ RGB(&HC0, &H0, &H0)

RGB = 84 130 53 ---- Hex = #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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文