Excel VBA: 隐藏所有列,然后取消隐藏某些列
Excel VBA: Hide all columns, then unhide some columns
我犹豫要不要问这个问题,因为我确实有解决方法,但我更喜欢更简洁的答案。
我正在使用 Excel 2010,我有一个程序可以对新 sheet 进行一些基本格式化:隐藏所有列,设置 header 行文本,格式化 header 行,取消隐藏 header 行使用的列。问题是取消隐藏不太有效。在程序 运行 之后,工作 sheet 看起来所有的列仍然隐藏,但如果我调整公式栏的大小,程序取消隐藏的列会如我所料出现。即使在保存、关闭和重新打开工作簿时,在我调整公式栏的大小之前,这些列也不会出现。
我尝试使用 DoEvents
刷新屏幕。我尝试将 Application.ScreenUpdating
设置为 true,尽管我从未将其设置为 false。我什至尝试通过 VBA 隐藏和取消隐藏公式栏。唯一可行的方法(我的解决方法)是在过程中调整公式栏的大小。它确实有效,但似乎没有必要。在我取消隐藏之前激活范围可能会起作用,但我不想在 VBA.
中使用 Activate
或 Select
有什么想法吗?
Private Sub FormatSheet(sh As Worksheet)
Dim HeaderText As Variant
Dim EndCol As Long
Dim Header As Range
'header items for sheet
HeaderText = Array("DATE", "USER", "BC", "TC", "SUM")
'get last column index based on headers
EndCol = UBound(HeaderText) - LBound(HeaderText) + 1
With sh
'hide all columns in the sheet
.Columns.Hidden = True
'set the header range
Set Header = .Range(.Cells(2, 1), .Cells(2, EndCol))
'set the header text
Header = HeaderText
'set the header row formatting
With .Rows(2)
.Font.Bold = True
.Interior.Color = RGB(217, 217, 217)
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
End With
End With
'unhide the columns used by the header
Header.EntireColumn.Hidden = False
'resize the formula bar to force the unhide to work
Application.FormulaBarHeight = 5
Application.FormulaBarHeight = 1
'autofit columns
.Columns.AutoFit
End With
End Sub
如果您希望它取消隐藏所有单元格:
cells.EntireColumn.Hidden = False
如果您只想取消隐藏 header 中使用的 5 列,则:
Range(Cells(1, 1), Cells(1, EndCol)).EntireColumn.Select
这只会取消隐藏 "Header" 中的列,并且必须将其放在 With 语句之外才能起作用(将其放在最后一行)。它使用 .select,我知道,但这是我让它工作的唯一方法....
LastCol = Range("A1").End(xlToRight).Column
与 sh
.Cells(1, EndCol + 1).Resize(, LastCol - EndCol).Columns.Hidden = True
结束于
以下将隐藏所有列,然后有选择地取消隐藏。
worksheet.Cells.EntireColumn.Hidden = true
worksheet.Cells(1,1).EntireColumn.Hidden = false
worksheet.Cells(1,2).EntireColumn.Hidden = false
注意这只适用于列
worksheet.Cells.EntireRow.Hidden = true
无效。
我犹豫要不要问这个问题,因为我确实有解决方法,但我更喜欢更简洁的答案。
我正在使用 Excel 2010,我有一个程序可以对新 sheet 进行一些基本格式化:隐藏所有列,设置 header 行文本,格式化 header 行,取消隐藏 header 行使用的列。问题是取消隐藏不太有效。在程序 运行 之后,工作 sheet 看起来所有的列仍然隐藏,但如果我调整公式栏的大小,程序取消隐藏的列会如我所料出现。即使在保存、关闭和重新打开工作簿时,在我调整公式栏的大小之前,这些列也不会出现。
我尝试使用 DoEvents
刷新屏幕。我尝试将 Application.ScreenUpdating
设置为 true,尽管我从未将其设置为 false。我什至尝试通过 VBA 隐藏和取消隐藏公式栏。唯一可行的方法(我的解决方法)是在过程中调整公式栏的大小。它确实有效,但似乎没有必要。在我取消隐藏之前激活范围可能会起作用,但我不想在 VBA.
Activate
或 Select
有什么想法吗?
Private Sub FormatSheet(sh As Worksheet)
Dim HeaderText As Variant
Dim EndCol As Long
Dim Header As Range
'header items for sheet
HeaderText = Array("DATE", "USER", "BC", "TC", "SUM")
'get last column index based on headers
EndCol = UBound(HeaderText) - LBound(HeaderText) + 1
With sh
'hide all columns in the sheet
.Columns.Hidden = True
'set the header range
Set Header = .Range(.Cells(2, 1), .Cells(2, EndCol))
'set the header text
Header = HeaderText
'set the header row formatting
With .Rows(2)
.Font.Bold = True
.Interior.Color = RGB(217, 217, 217)
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
End With
End With
'unhide the columns used by the header
Header.EntireColumn.Hidden = False
'resize the formula bar to force the unhide to work
Application.FormulaBarHeight = 5
Application.FormulaBarHeight = 1
'autofit columns
.Columns.AutoFit
End With
End Sub
如果您希望它取消隐藏所有单元格:
cells.EntireColumn.Hidden = False
如果您只想取消隐藏 header 中使用的 5 列,则:
Range(Cells(1, 1), Cells(1, EndCol)).EntireColumn.Select
这只会取消隐藏 "Header" 中的列,并且必须将其放在 With 语句之外才能起作用(将其放在最后一行)。它使用 .select,我知道,但这是我让它工作的唯一方法....
LastCol = Range("A1").End(xlToRight).Column
与 sh
.Cells(1, EndCol + 1).Resize(, LastCol - EndCol).Columns.Hidden = True
结束于
以下将隐藏所有列,然后有选择地取消隐藏。
worksheet.Cells.EntireColumn.Hidden = true
worksheet.Cells(1,1).EntireColumn.Hidden = false
worksheet.Cells(1,2).EntireColumn.Hidden = false
注意这只适用于列
worksheet.Cells.EntireRow.Hidden = true
无效。