列宽与隐藏列

时间:2015-03-29 21:47:31

标签: excel vba excel-vba

隐藏列并将其宽度设置为 0 之间是否存在任何差异。那是:

Columns("A:A").ColumnWidth = 0

Range("A1").EntireColumn.Hidden = True

完全等同??

3 个答案:

答案 0 :(得分:4)

根据我的测试代码,它们是完全等效的

Sub TestHidden()

  ActiveSheet.Columns(2).ColumnWidth = 0

  If ActiveSheet.Columns(2).Hidden = True Then
    MsgBox "Column is hidden"
  End If


  ActiveSheet.Columns(3).Hidden = True
  MsgBox "Col 3 width:" & ActiveSheet.Columns(3).ColumnWidth

End Sub

将其粘贴到Sheet1&#VBA页面中以运行它。

答案 1 :(得分:2)

虽然您的问题主要针对列宽和隐藏状态,但我会指出,使用过滤器生成的行不可见,报告行高为零,属性为真.Hidden。随后隐藏一些additioanl行然后清除过滤器将使所有行可见。换句话说,清除.AutoFilter会覆盖您手动隐藏的行。

Row Filtering and Hidden

鉴于上述示例数据,请运行以下宏。它将过滤掉两个数据行,然后隐藏那些可见的数据行。最后,它将清除AutoFilter。

Sub AutoFilter_is_Hidden()
    Dim r As Long
    With Sheet1.Cells(1, 1).CurrentRegion
        If .AutoFilter Then .AutoFilter
        .AutoFilter field:=4, Criteria1:=0
        For r = 2 To 5
            Debug.Print "Row " & r & " hidden: " & .Rows(r).Hidden & " - " & .Rows(r).RowHeight
        Next r
        With .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
            .SpecialCells(xlCellTypeVisible).EntireRow.Hidden = True
        End With
        For r = 2 To 5
            Debug.Print "Row " & r & " hidden: " & .Rows(r).Hidden & " - " & .Rows(r).RowHeight
        Next r
        .AutoFilter
        For r = 2 To 5
            Debug.Print "Row " & r & " hidden: " & .Rows(r).Hidden & " - " & .Rows(r).RowHeight
        Next r
    End With
End Sub

以下是立即窗口的结果,为清楚起见进行了评论。

' column D filtered for 0
Row 2 hidden: True - 0
Row 3 hidden: False - 14.5
Row 4 hidden: True - 0
Row 5 hidden: False - 14.5
' with filter still active, visible cells hidden
Row 2 hidden: True - 0
Row 3 hidden: True - 0
Row 4 hidden: True - 0
Row 5 hidden: True - 0
' Autofilter removed
Row 2 hidden: False - 14.5
Row 3 hidden: False - 14.5
Row 4 hidden: False - 14.5
Row 5 hidden: False - 14.5

你最终会得到你的开头,而不是隐藏两行。

因此,看起来RowHeight / ColumnWidth不仅与真正的Hidden属性无法区分,而且Autofilter的性质也完全相同;它不区分自己隐藏的行和您通过其他方法隐藏的行。如果存在任何差异,则在清除其过滤器时,它不会取消隐藏由备用方法隐藏的行。

答案 2 :(得分:1)

我有Excel-2013 ColumnWidth最大值,隐藏列为3.84615384615385E-02

我试着:

ActiveSheet.Columns(2).ColumnWidth = 3.84615384615385E-02
  

列(2)已隐藏。

ActiveSheet.Columns(2).ColumnWidth = 3.84615384615386E-02
  

列(2)未隐藏。