列宽vs隐藏列

隐藏一个列并将其宽度设置为0是否有区别。 那是:

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

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

完全等效?

根据我的testing代码,它们是完全相同的

 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页面中运行它。

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

行筛选和隐藏

给定上面的示例数据,运行下面的macros。 它会过滤出两个数据行,然后隐藏可见的。 最后,它将清除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的本质也是完全相同的。 它不会区分自己隐藏的行和通过其他方法隐藏的行。 如果存在任何差异,那么当其filter被清除时,它不会取消隐藏被替代方法隐藏的行。

我有Excel-2013的ColumnWidth最大值有一个隐藏的列是3.84615384615385E-02

当我尝试:

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

列(2)被隐藏。

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

列(2)不隐藏。