2015-01-09 1659 views
0

我不想问这个,因为我确实有一个解决方法,但我更喜欢一个更清晰的答案。Excel VBA:隐藏所有列,然后取消隐藏某些列

我使用的是Excel 2010,我有一个在新工作表上执行一些基本格式设置的过程:隐藏所有列,设置标题行文本,设置标题行格式,取消隐藏标题行使用的列。问题是取消隐藏不起作用。该过程运行后,工作表看起来像所有的列仍然隐藏,但如果我调整公式栏,程序unhid列出现我所期望的列。即使在保存,关闭并重新打开工作簿时,只有在调整公式栏的大小时才显示这些列。

我试着用DoEvents来刷新屏幕。尽管我从未将它设置为false,但我试图将Application.ScreenUpdating设置为true。我甚至试图通过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 
+0

这有一个微软的bug环。 – theMayer 2015-01-10 16:49:49

回答

0

LASTCOL =范围( “A1”)。完(xlToRight).COLUMN

与SH

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

结束随着

+0

我把这个标记为答案,尽管我对隐藏线使用了稍微不同的形式:'Header.Offset(,EndCol).Resize(,LastCol - EndCol).Columns.Hidden = True'。谢谢! – phrebh 2015-01-12 14:21:58

1

如果你希望它取消隐藏所有单元格:

cells.EntireColumn.Hidden = False 

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

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

这只会取消隐藏“标题”中的列,并且它必须放在With语句之外才能工作(将其作为最后一行)。它使用。选择,我知道,但是这就是我能得到它的工作的唯一办法....

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 

不工作。