2017-08-15 143 views
0

我想基於第一行中的單元格字體顏色隱藏列。這裏我想隱藏列,如果第一行中的單元格具有黑色作爲字體顏色。現在,我不想定義一個範圍,因爲我的數據每週都有所不同,所以本週可以有10個專欄,下週可以有20個專欄,並且我想讓我的代碼保持動態。根據單元格字體顏色在一行中隱藏列vba

它看起來像我的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 

enter image description here

enter image description here

+0

有什麼奇怪的是,如果我在結果選項卡並運行我的vba代碼,它實際上會取消隱藏列A和C,不知道我的代碼的邏輯是否是錯誤的以及如何修復它 – sc1324

回答

2

您需要參考的單元格區域。而且你不需要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 
+0

謝謝,它的作用就像一個魅力! – sc1324

1

你需要在第一行中與細胞的工作:

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 
+1

謝謝你的代碼工作正常! – sc1324

1

有點晚,但試試這個:

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 
+0

謝謝你的代碼工作正常! – sc1324

相關問題