Я создал макрос, который сворачивает определенное количество столбцов на основе входного листа.Макрос работает, когда пользователь активирует лист (ы), как показано ниже.
Worksheet_Activate macro:
Private Sub Worksheet_Activate()
ActiveSheet.Unprotect "mypassword"
Call collapsecolumns
ActiveSheet.Protect "mypassword"
End sub
Макрос, который называется:
Public Sub collapsecolumns()
Dim ws1 As Worksheet: Set ws1 = Sheets("inputSheet")
Dim ws2 As Worksheet: Set ws2 = ActiveSheet
Dim sheetNo As Integer, colToCollapse As Integer
'number in sheet name define range for counting columns to collapse
sheetNo = Right(ws2.Name, 1)
'input range differs depending on which sheet is chosen
colToCollapse = Application.WorksheetFunction.CountA(ws1.Range("J" & ((6 * sheetNo) - 4) & ":J" & ((6 * sheetNo) + 1)))
ws2.Range(Cells(1, 1), Cells(1, 35)).EntireColumn.Hidden = False
If colToCollapse = 0 Then
Exit Sub
End If
ws2.Range(Cells(1, colToCollapse * 6), Cells(1, 35)).EntireColumn.Hidden = True
End Sub
Однако, когда лист активирован, вы видели, как столбцы сворачивались (или разворачивались) в зависимости от того, что вы написали на другом листе.У меня есть различные комбинации и размещения ScreenUpdate = False и CompleteEvents = False для маскировки свертывания, но безуспешно
Есть ли способ, когда пользователь впервые видит лист, когда столбцы свернуты, когдаиспользование Worksheet_Activate ()?