使用单元格颜色的Excel 2010 VBA

我正在尝试自动化突出显示过程,以显示某些行已完成。 这个过程工作得很好,但是在我的工作表的开始处,我试图让代码为表单创build一个“键”,以显示颜色的不同含义。 在该键中,白色,绿色和红色被用作尚未完成(白色),完成(绿色)和错误/不完整(红色)的标签。 灰色也用于私人pipe道。 我试图用相应的颜色来标记颜色,绿色为绿色,红色为红色等。我已经为第一行编写了代码,但是在绿色上并没有将“绿色”单元格颜色为绿色(它留下白色),并在“红色”它将单元格颜色为绿色。 这里是我使用的代码(我很抱歉,因为我是编码新手):

Sub SmartHighlight() Dim Counter As Integer Dim i As Integer Dim j As Integer Dim k As Range Dim Chkr As Integer Chkr = 0 xTitleId = "Smart Highlighter" MsgBox "This macro analyzes the given pipe data to highlight completed sections." For Each k In ActiveSheet.UsedRange.Rows Counter = 0 i = 8 For j = 0 To 3 If ActiveSheet.Cells(k.Row, i).Value = 0 Then Counter = Counter + 1 End If i = i + 1 Next j If ActiveSheet.Cells(k.Row, 1) = "PIPE_ID" Then ActiveSheet.Cells(k.Row, 15).Value = "KEY:" ActiveSheet.Cells(k.Row, 16).Value = "White" ActiveSheet.Cells(k.Row, 17).Value = "Not yet completed." ActiveSheet.Cells(k.Row, 18).Value = "Grey" k.Cells(k.Row, 18).Interior.ColorIndex = 15 ActiveSheet.Cells(k.Row, 19).Value = "Private." ElseIf ActiveSheet.Cells(k.Row, 1) = "" And Chkr = 0 Then ActiveSheet.Cells(k.Row, 16).Value = "Green" k.Cells(k.Row, 16).Interior.ColorIndex = 4 ActiveSheet.Cells(k.Row, 17).Value = "Completed." Chkr = Chkr + 1 ElseIf ActiveSheet.Cells(k.Row, 1) = "" And Chkr = 1 Then ActiveSheet.Cells(k.Row, 16).Value = "Red" k.Cells(k.Row, 16).Interior.ColorIndex = 3 ActiveSheet.Cells(k.Row, 17).Value = "Error/Incomplete." ElseIf ActiveSheet.Cells(k.Row, 4) = "PRIVATE PIPE" Then k.EntireRow.Interior.ColorIndex = 15 ElseIf Counter <> 4 Then k.EntireRow.Interior.ColorIndex = 4 ElseIf Counter = 4 And ActiveSheet.Cells(k.Row, 14) = "" Then k.EntireRow.Interior.ColorIndex = 3 End If Next k End Sub 

这里是excel的输出: Click for Image

如果任何人都可以帮助我纠正颜色错误,将不胜感激。 谢谢!

目前还不清楚为什么你要切换ActiveSheet.Cellsk.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。

我build议你做一个子程序,当你运行这个macros的时候,会更新头文件/关键字等更多的静态信息。

这就是我最终在一个Excelmacros小工具中完成的工作,它是绘制标题行的子工具:

 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中调用,如果您需要更改颜色scheme,您可以更改样式以将格式应用于整个电子表格。

 Sheets(szSheetName).Cells(iRow + 1, iCel + 5).Style = "Input" 

另一件好事是适合你的input,最后select一些特定的单元格。

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

还有一件事,你可能想要寻找条件格式。 这可能会提供一个额外的function使用。