隐藏列并将其宽度设置为 0 之间是否存在任何差异。那是:
Columns("A:A").ColumnWidth = 0
和
Range("A1").EntireColumn.Hidden = True
完全等同??
答案 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
会覆盖您手动隐藏的行。
鉴于上述示例数据,请运行以下宏。它将过滤掉两个数据行,然后隐藏那些可见的数据行。最后,它将清除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)未隐藏。