Я не решаюсь спросить об этом, потому что у меня есть обходное решение, но я бы предпочел более чистый ответ.Excel VBA: Скрыть все столбцы, затем показать некоторые столбцы
Я использую Excel 2010, и у меня есть процедура, которая делает некоторое базовое форматирование на новом листе: скрывает все столбцы, устанавливает текст строки заголовка, форматирует строку заголовка, отображает столбцы, которые использует строка заголовка. Проблема в том, что «невидимка» не совсем работает. После выполнения процедуры рабочий лист выглядит так, как будто все столбцы по-прежнему скрыты, но если я изменяю размер строки формул, столбцы, которые будут отображаться процедурой unhid, выглядят так, как я ожидал. Даже когда книга сохранена, закрыта и снова открыта, столбцы не отображаются, пока я не изменю размер панели формул.
Я попытался использовать DoEvents
для обновления экрана. Я пробовал установить Application.ScreenUpdating
на true, хотя я никогда не устанавливал его в false. Я даже пытался скрывать и показывать формулу через VBA. Единственное, что работает (мое обходное решение) - изменить размер панели формул как часть процедуры. Он работает, но кажется, что это не обязательно. Он может работать, чтобы активировать диапазон, прежде чем я его покажу, но я предпочитаю не использовать Activate
или Select
в VBA.
Любые мысли?
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
У этого есть кольцо ошибки Microsoft. – theMayer