VBA将内部颜色更改为未在代码中指定的随机颜色

我创build了一个macros来根据不同的标准对销售交易进行颜色协调。 范围是列F:R,具有未知数量的事务。 我一直在使用AutoFilter来有条件地格式化数据。

它首先根据事务types(sale,void,authorization)对整行进行着色,然后基于响应(批准,拒绝等)对整行进行着色。 最后一步是为每个相应的交易着色实际的卡片types(第一列)。 我希望AMEX电池是轻薄的,其余的卡types(Discover,MC和Visa)电池是粉红色的。

当它为AMEX电池上色时,它完美的工作。 当它继续为其余的卡片types着色时,我应该先看到一片粉红色的卡片,然后它们全部变成深色的卡片。 我已经重复了我的代码,不知道Discover,MC和Visa的单元为什么一秒钟都在闪烁,当macros完成运行时,所有的Discover,MC和Visa单元都是黑暗的。 深蓝色的颜色代码/ RGB代码在代码中没有任何地方…如果有人能帮助我,那将是不可思议的! 我真的难倒了!

注意:我希望我的代码不是太乱。 (例如,我的命名范围在这个macros中有点失控。)这是我第一次向论坛发布VBA问题(或者向任何人展示我的代码)。 如果你有任何VBA的build议,我想改善!

Sub PayPalColor() ' PayPalColor Macro ' Color coordinate the PayPal Reports 'Add filters Range("F1:R1").Select Selection.AutoFilter 'Reset Used Range Application.ActiveSheet.UsedRange Dim LastestRow As Long LastestRow = Range("K" & Rows.Count).End(xlUp).Row 'Sort TYPE alphabetically Dim rRng As Range Set rRng = Range("$F$2:$Q$" & LastestRow) rRng.Sort key1:=Range("G2"), order1:=xlAscending, _ Header:=xlNo With ActiveSheet.Range("$F$2:$Q$" & LastestRow) ' TYPE: AUTHORIZATION Dim FilteredRange1 As Range Dim rw1 As Range .AutoFilter Field:=2, Criteria1:="Authorization" Set FilteredRange1 = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible) For Each rw1 In FilteredRange1.Rows If rw1.Row > FilteredRange1.Rows.Row Then 'If visible cell, format row here With rw1.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 12566463 .TintAndShade = 0 .PatternTintAndShade = 0 End With End If Next ActiveSheet.ShowAllData ' TYPE: CREDIT Dim FilteredRange2 As Range Dim rw2 As Range .AutoFilter Field:=2, Criteria1:="Credit" Set FilteredRange2 = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible) For Each rw2 In FilteredRange2.Rows If rw2.Row > FilteredRange2.Rows.Row Then 'If visible cell, format row here With rw2.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 16752607 .TintAndShade = 0 .PatternTintAndShade = 0 End With End If Next ActiveSheet.ShowAllData ' TYPE: DELAYED CAPTURE Dim FilteredRange3 As Range Dim rw3 As Range .AutoFilter Field:=2, Criteria1:="Delayed Capture" Set FilteredRange3 = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible) For Each rw3 In FilteredRange3.Rows If rw3.Row > FilteredRange3.Rows.Row Then 'If visible cell, format row here With rw3.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 16768121 .TintAndShade = 0 .PatternTintAndShade = 0 End With End If Next ActiveSheet.ShowAllData ' TYPE: VOID Dim FilteredRange4 As Range Dim rw4 As Range .AutoFilter Field:=2, Criteria1:="Void" Set FilteredRange4 = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible) For Each rw4 In FilteredRange4.Rows If rw4.Row > FilteredRange4.Rows.Row Then 'If visible cell, format row here With rw4.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 15513599 .TintAndShade = 0 .PatternTintAndShade = 0 End With End If Next ActiveSheet.ShowAllData End With 'Sort RESPONSE alphabetically Dim rRng2 As Range Set rRng2 = Range("$F$2:$Q$" & LastestRow) rRng2.Sort key1:=Range("L2"), order1:=xlAscending, _ Header:=xlNo With ActiveSheet.Range("$F$2:$Q$" & LastestRow) ' RESPONSE: DECLINED Dim FilteredRange5 As Range Dim rw5 As Range .AutoFilter Field:=7, Criteria1:="Declined" Set FilteredRange5 = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible) For Each rw5 In FilteredRange5.Rows If rw5.Row > FilteredRange5.Rows.Row Then 'If visible cell, format row here With rw5.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 192 .TintAndShade = 0 .PatternTintAndShade = 0 End With With .Font .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 End With End If Next ActiveSheet.ShowAllData 'RESPONSE: INVALID EXP Dim FilteredRange5a As Range Dim rw5a As Range .AutoFilter Field:=7, Criteria1:="Invalid Exp" Set FilteredRange5a = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible) For Each rw5a In FilteredRange5a.Rows If rw5a.Row > FilteredRange5a.Rows.Row Then 'If visible cell, format row here With rw5a.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 192 .TintAndShade = 0 .PatternTintAndShade = 0 End With With .Font .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 End With End If Next ActiveSheet.ShowAllData ' RESPONSE: CREDIT ERROR Dim FilteredRange5b As Range Dim rw5b As Range .AutoFilter Field:=7, Criteria1:="Credit Error" Set FilteredRange5b = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible) For Each rw5b In FilteredRange5b.Rows If rw5b.Row > FilteredRange5b.Rows.Row Then 'If visible cell, format row here With rw5b.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 192 .TintAndShade = 0 .PatternTintAndShade = 0 End With With .Font .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 End With End If Next ActiveSheet.ShowAllData End With 'clear background for card type column Range("I2").Select Range(Selection, Selection.End(xlDown)).Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With 'Sort CARD TYPE alphabetically Dim rRng3 As Range Set rRng3 = Range("$F$2:$Q$" & LastestRow) rRng3.Sort key1:=Range("I2"), order1:=xlAscending, _ Header:=xlNo With ActiveSheet.Range("I2:$I$" & LastestRow) ' CARD TYPE: AMEX Dim FilteredRange6 As Range Dim rw6 As Range .AutoFilter Field:=4, Criteria1:="AMEX" Range("I2").Select Range(Selection, Selection.End(xlDown)).Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent5 .TintAndShade = 0.399975585192419 .PatternTintAndShade = 0 End With With Selection.Font .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 End With ActiveSheet.ShowAllData ' CARD TYPE: Discover Dim FilteredRange111 As Range Dim rw111 As Range .AutoFilter Field:=4, Criteria1:="Discover" Range("I2").Select Range(Selection, Selection.End(xlDown)).Select With Selection.Interior .Pattern = xlSolid .Color = RGB(255, 51, 204) .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection.Font .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 End With ActiveSheet.ShowAllData ' CARD TYPE: MC Dim FilteredRange121 As Range Dim rw121 As Range .AutoFilter Field:=4, Criteria1:="MC" Range("I2").Select Range(Selection, Selection.End(xlDown)).Select With Selection.Interior .Pattern = xlSolid .Color = RGB(255, 51, 204) .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection.Font .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 End With ActiveSheet.ShowAllData ' CARD TYPE: Visa Dim FilteredRange122 As Range Dim rw122 As Range .AutoFilter Field:=4, Criteria1:="Visa" Range("I2").Select Range(Selection, Selection.End(xlDown)).Select With Selection.Interior .Pattern = xlSolid .Color = RGB(255, 51, 204) .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection.Font .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 End With ActiveSheet.ShowAllData Range("F2").Select End With End Sub 

当我有这样的问题,我经常使用“切换断点”选项,在我的版本的VBA是在debugging菜单。 也许在粉红颜色分配发生的地方添加一个断点,然后使用F8键,直到到达深青色/暗深青色分配所在的代码行。 我想知道是否黑暗的深青色可以是一个范围设置为青色,然后select/突出显示…

我发现使用RGB颜色问题较less,试试这个:

  .Color = RGB(127,187,199) 

build议你在没有VBA的情况下尝试这样做 – 在SO中有很多关于基于条件格式化行的答案。 常用的公式如下所示:

 =INDIRECT("$E"&ROW())=[Value] 

从那里,您可以为单个列添加其他条件格式。