与Excel VBA中的条件格式相关的宏问题

时间:2014-12-12 12:07:14

标签: excel vba for-loop conditional-formatting

我正试图从下往上检查颜色。如果找到一个,我想更改相关表格标签的颜色。

我有两个问题和一个我想摆脱的问题。

  1. RGB(230, 184, 183)对我来说是一个优先事项。在检查其余部分之前,我需要圈选表单并检查它。笨拙地做这个atm ....

  2. 无法识别条件格式颜色。据我所见,我需要再做一次尝试?

  3. 问题:我强迫从1Row = 1000开始。还有更好的方法吗?

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim lRow As Long
    Dim iCntr As Long
    Dim ws As Worksheet
    lRow = 1000
        For Each ws In ThisWorkbook.Worksheets
            For iCntr = lRow To 1 Step -1
                If ws.Cells(iCntr, 1).Interior.Color = RGB(230, 184, 183) Then
                ws.Tab.Color = RGB(230, 184, 183)
                Exit For
                    ElseIf ws.Cells(iCntr, 1).Interior.Color = RGB(184, 204, 228) Then
                    ws.Tab.Color = RGB(184, 204, 228)
                    Exit For
                        Else: ws.Tab.Color = RGB(195, 215, 155)
                End If
           Next
       Next ws
    End Sub
    

2 个答案:

答案 0 :(得分:1)

条件格式颜色可通过Range对象的DisplayFormat属性获得。例如... Ws.Cells(iCntr,1).DisplayFormat.Interior.Color

答案 1 :(得分:0)

我遇到了类似问题,条件格式化的单元格无法被VBA识别,也从未找到修复程序。我的解决方案最终不是使用条件格式化,而是在验证例程期间通过VBA为单元格着色。这可能不是你想要的,我很欣赏。

关于你强行从第1000行开始向上工作,有几种方法可以找到工作表的最后一行 1.使用usedrange.rows值

For iCntr = ws.usedrange.rows.count To 1 Step -1

但是,根据工作表的结构,Usedrange可能无法预测(例如,如果您的第一行和第一列为空白,则不包括使用范围地址中的那些)但根据您的具体情况,这可能是最简单的这样做的方式。 2.找到您将一直填充的列中最后一个填充的行,并将其用作计数器

lRow = ws.Cells(.Rows.Count, "A").End(xlUp).Row

并保持其余代码相同