【问题标题】:hide column based on cell font color in a row vba根据行中的单元格字体颜色隐藏列vba
【发布时间】:2017-08-15 13:13:21
【问题描述】:

我正在尝试根据第一行中的单元格字体颜色隐藏列。在这里,如果第一行中的单元格的字体颜色为黑色,我想隐藏列。现在,我不想定义一个范围,因为我的数据每周都在变化,所以我可以在本周有 10 列,下周有 20 列,并且我想保持我的代码动态。

看起来我的 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

【问题讨论】:

  • 奇怪的是,如果我在结果选项卡上运行我的 vba 代码,它实际上会取消隐藏列 A 和 C,不确定我的代码逻辑是否错误以及如何修复它跨度>

标签: vba excel


【解决方案1】:

您需要引用范围内的单元格。而且您不需要 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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      【解决方案3】:

      有点晚了,但试试这个:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 2019-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-11
        • 1970-01-01
        相关资源
        最近更新 更多