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.

中使用 ActivateSelect

有什么想法吗?

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

无效。