根据单元格字体颜色在行vba中隐藏列

我想在第一行隐藏基于单元格字体颜色的列。 在这里我想隐藏列,如果第一行的单元格是黑色的字体颜色。 现在,我不想定义范围,因为我的数据每周都有变化,所以本周可以有10列,下周可以有20列,我想保持我的代码dynamic。

它看起来像我的VBA代码通过(按F8 )没有任何问题,但没有任何反应。 我还在下面发布了一个样本以及期望的结果。

Sub test() Dim i As Range For Each i In Rows(1) If i.Font.Color = RGB(0, 0, 0) Then i.EntireColumn.Hidden = True Else i.EntireColumn.Hidden = False End If Next i End Sub 

在这里输入图像说明

在这里输入图像说明

你需要参考范围内的单元格。 而且你不需要If语句。 尝试:

 Sub foo() Dim c As Range For Each c In ActiveSheet.UsedRange.Rows(1).Cells c.EntireColumn.Hidden = c.Font.Color = 0 Next c End Sub 

您需要在第一行使用单元格:

 Option Explicit Public Sub HideBlackHeaders() Dim ws As Worksheet, headerRow As Range, cel As Range Set ws = Sheet1 'Use the CodeName of the sheet Set headerRow = ws.UsedRange.Rows(1) For Each cel In headerRow.Cells cel.EntireColumn.Hidden = (cel.Font.Color = RGB(0, 0, 0)) Next cel End Sub 

有点晚了,但试试这个:

 Sub test() Dim i As Long Dim lColumn As Long Dim ws As Worksheet: Set ws = ActiveSheet 'Last column lColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column For i = 1 To lColumn If Cells(1, i).Font.Color = RGB(0, 0, 0) Then Cells(1, i).EntireColumn.Hidden = True Else Cells(1, i).EntireColumn.Hidden = False End If Next End Sub