【问题标题】:coloring a row including cells in hidden columns为包含隐藏列中的单元格的行着色
【发布时间】:2018-05-29 07:55:31
【问题描述】:

对于我的工作表,我编写了一个 VBA 代码来隐藏一些选定的列。隐藏这些列后,我想标记一行并为其着色。之后,我想取消隐藏列,以便返回到原始工作表,但所选行完全着色。

VBA 工作正常。我的问题是,当我选择一行(点击行号)并为其着色时,当我取消隐藏列时,隐藏在列中的行的那些单元格没有着色。

即使某些单元格被宏隐藏,是否有机会为整行着色?

谢谢

【问题讨论】:

  • 请添加您的代码以便更好地理解
  • 行的着色是手动发生的。隐藏某些列的代码如下:ActiveSheet.Columns("A:F").Hidden = True
  • 我无法重现该错误。通过 VBA 为行着色可以吗?
  • @Pierre44 - 不,VBA 与直接着色没有任何关系。假设VBA隐藏了A列。我手动为第一行着色(从B列开始,因为A现在被隐藏了)。当我通过第二个 VBA 取消隐藏 A 列时,彩色第一行的 A 列中的单元格保持未着色。我希望我现在可以说清楚。
  • 一种解决方案是在第二个代码中添加颜色,方法是检查哪些行是彩色的,并对以前隐藏的单元格着色。

标签: excel ms-office office365 vba


【解决方案1】:

必须说我无法重现问题。使用如下代码:

Rows(1).Interior.Color = vbBlue

是否为一行中的所有单元格着色,即使是隐藏的单元格。但是,在您的情况下,可能会使用一段代码循环遍历一行中的所有单元格,直到最后使用的列,并单独为每个单元格着色。希望这能解决您的问题:

Sub SpecialLoop()
    Dim cl As Range, rng As Range
    Dim rw As Long

    rw = 5 'Obviously just type any row here or get the rownr. some other way    
    Set rng = ActiveSheet.Range(Cells(rw, 1), Cells(rw, ActiveSheet.Cells(rw, Columns.Count).End(xlToLeft).Column))

    For Each cl In rng
        If Intersect(cl, rng.SpecialCells(xlCellTypeVisible)) Is Nothing Then 
            Range(cl.Address).Interior.Color = vbBlue
        Else
            Range(cl.Address).Interior.Color = vbBlue
        End if            
    Next cl
End Sub

无论如何,我希望你现在可以修复它:)

【讨论】:

  • 这更优雅!谢谢@JvdV
【解决方案2】:

谢谢。我通过简单地添加以下代码行并选择了我想要着色的单元格来解决了这个问题:

ActiveSheet.Range("A1:A1").Interior.ColorIndex = 1

颜色当然可以修改。

【讨论】:

    猜你喜欢
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多