带设置单元格颜色的Excel 2010 VBA

带设置单元格颜色的Excel 2010 VBA,vba,excel,colors,Vba,Excel,Colors,我正在尝试自动化高亮显示过程,以显示某些行是完整的。这个过程很好,但是在我的工作表开始时,我试图让代码为工作表创建一个“键”,以显示颜色的不同含义。在键中,白色、绿色和红色用作尚未完成(白色)、已完成(绿色)和错误/不完整(红色)的标签。灰色也用于私人管道。我试图用它们的颜色给相应的标签上色,绿色为绿色,红色为红色,等等。我已经为此编写了代码,用于第一行,但在绿色上它不会将“绿色”单元格上色为绿色(它将其保留为白色),在“红色”上它将单元格上色为绿色。以下是我正在使用的代码(很抱歉,这不好,因为

我正在尝试自动化高亮显示过程,以显示某些行是完整的。这个过程很好,但是在我的工作表开始时,我试图让代码为工作表创建一个“键”,以显示颜色的不同含义。在键中,白色、绿色和红色用作尚未完成(白色)、已完成(绿色)和错误/不完整(红色)的标签。灰色也用于私人管道。我试图用它们的颜色给相应的标签上色,绿色为绿色,红色为红色,等等。我已经为此编写了代码,用于第一行,但在绿色上它不会将“绿色”单元格上色为绿色(它将其保留为白色),在“红色”上它将单元格上色为绿色。以下是我正在使用的代码(很抱歉,这不好,因为我刚刚开始编码):

子智能高亮显示()
作为整数的Dim计数器
作为整数的Dim i
作为整数的Dim j
调暗k As范围
Dim Chkr作为整数
Chkr=0
xTitleId=“智能荧光灯”
MsgBox“此宏分析给定的管道数据以突出显示已完成的截面。”
对于ActiveSheet.UsedRange.Rows中的每个k
计数器=0
i=8
对于j=0到3
如果ActiveSheet.Cells(k.Row,i).Value=0,则
计数器=计数器+1
如果结束
i=i+1
下一个j
如果ActiveSheet.Cells(k.Row,1)=“管道ID”,则
ActiveSheet.Cells(k.Row,15).Value=“键:”
ActiveSheet.Cells(k.Row,16).Value=“白色”
ActiveSheet.Cells(k.Row,17).Value=“尚未完成。”
ActiveSheet.Cells(k.Row,18).Value=“灰色”
k、 单元格(k.Row,18)。Interior.ColorIndex=15
ActiveSheet.Cells(k.Row,19).Value=“Private”
ElseIf ActiveSheet.Cells(k.Row,1)=“”,然后Chkr=0
ActiveSheet.Cells(k.Row,16).Value=“绿色”
k、 单元格(k.Row,16)。Interior.ColorIndex=4
ActiveSheet.Cells(k.Row,17).Value=“已完成。”
Chkr=Chkr+1
ElseIf ActiveSheet.Cells(k.Row,1)=“”,然后Chkr=1
ActiveSheet.Cells(k.Row,16).Value=“红色”
k、 单元格(k.Row,16)。Interior.ColorIndex=3
ActiveSheet.Cells(k.Row,17).Value=“错误/不完整。”
ElseIf ActiveSheet.Cells(k.Row,4)=“PRIVATE PIPE”然后
k、 EntireRow.Interior.ColorIndex=15
艾尔塞夫4号柜台
k、 EntireRow.Interior.ColorIndex=4
ElseIf Counter=4,ActiveSheet.Cells(k.Row,14)=“然后
k、 EntireRow.Interior.ColorIndex=3
如果结束
下一个k
端接头
以下是excel中的输出:


如果有人能帮我纠正着色错误,我将不胜感激。谢谢

我建议您创建一个子过程,在运行宏时更新标题/键等更多静态信息

这就是我在一个Excel宏小工具中完成的工作,该小工具是绘制标题行的子组件的一部分:

Sub PrepareHeaders(szSheetName)
Sheets(szSheetName).Cells(iRow + 1, iCel) = "Add/Update"
Select Case szSheetName
    Case "Value Lists"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 1) = "Object Type Name Singular"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 2) = "Object Type Name Plural"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 3) = "ID"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 4) = "Real Object"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 5) = "Owner Type ID"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 6) = "Aliases"
    End Select
    Sheets(szSheetName).Rows(iRow + 1).Font.Bold = True
    Sheets(szSheetName).Columns("A:Z").EntireColumn.AutoFit
    Sheets(szSheetName).Cells(1, iCel).Select
End Sub
此外,还可以在Excel工作表中使用样式。这些样式可以从VBA中调用,如果您需要更改配色方案,您可以更改样式以将格式应用于整个电子表格

Sheets(szSheetName).Cells(iRow + 1, iCel + 5).Style = "Input"
另一个好方法是调整输入,最后选择一些特定的单元格

Sheets(szSheetName).Columns("A:Z").EntireColumn.AutoFit
Sheets(szSheetName).Cells(1, iCel).Select

还有一件事,您可能需要查找条件格式。这可能提供了一个额外的功能。

不清楚为什么要在
ActiveSheet.Cells
k.Cells
之间切换

    ActiveSheet.Cells(k.Row, 18).Value = "Grey"
    k.Cells(k.Row, 18).Interior.ColorIndex = 15
在代码中,范围
k
表示工作表数据中的一行。您可以使用Cells()获取对该范围内单个单元格的引用,但需要小心使用正确的索引,否则您将得到一个甚至不属于
k
的单元格

例如,如果将k设置为图纸上的第4行:

k.Cells(4).Address()
是D4,但是

k.Cells(k.Row,4).Address() 'same as k.Cells(4, 4).Address()
是D7而不是D4

k.Cells(1, 4).Address()

将是D4。

对于此应用程序,条件格式可能更容易…感谢E.Trauger的回复!不幸的是,我试图在其他工作表中重用此宏,因此我尝试使用VBA编写它。据我所知,如果不重新定义条件格式,就无法自动将条件格式传递到我的所有其他工作表(有很多工作表)。最终,我尝试将这个宏链接到我的功能区栏,这样我就可以只单击一次并继续下一次。这很有效!非常感谢。这很尴尬,但我很难理解代码中的k(或k和ActiveSheet之间的区别)到底是什么。更新了我的答案,看看是否有帮助。太好了!非常感谢。
k.Cells(1, 4).Address()