Excel VBA:隐藏所有列,然后取消隐藏某些列

时间:2015-01-09 18:15:41

标签: excel vba excel-vba

我对此问题犹豫不决,因为我确实有一个解决方法,但我更喜欢更清晰的答案。

我正在使用Excel 2010,我有一个在新工作表上执行一些基本格式化的过程:隐藏所有列,设置标题行文本,格式化标题行,取消隐藏标题行使用的列。问题是取消隐藏效果不好。运行该过程后,工作表看起来仍然隐藏了所有列,但如果我调整公式栏的大小,那么过程unhid的列将按照我的预期显示。即使保存,关闭和重新打开工作簿,在我调整公式栏的大小之前,列也不会出现。

我尝试使用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

3 个答案:

答案 0 :(得分:1)

如果你想让它取消隐藏所有细胞:

cells.EntireColumn.Hidden = False

如果你只想取消隐藏标题中使用的5列,那么:

Range(Cells(1, 1), Cells(1, EndCol)).EntireColumn.Select

这只会取消隐藏" Header"中的列,并且必须将它放在With语句之外才能工作(将其作为最后一行)。它使用.select,我知道,但这是我能让它工作的唯一方法....

答案 1 :(得分:0)

LastCol =范围(" A1")。结束(xlToRight).Column

用sh

.Cells(1, EndCol + 1).Resize(, LastCol - EndCol).Columns.Hidden = True

结束

答案 2 :(得分:0)

以下内容将隐藏所有列,然后选择性地取消隐藏。

worksheet.Cells.EntireColumn.Hidden = true
worksheet.Cells(1,1).EntireColumn.Hidden = false
worksheet.Cells(1,2).EntireColumn.Hidden = false

注意这仅适用于列

worksheet.Cells.EntireRow.Hidden = true

不起作用。