Доброго времени суток. Есть книга с 4-мя листами. На первом листе макросом во второй колонке (B) вписываются название листов за исключением первого листа:
Далее, при при активации первого листа (или переходе с другого листа) создаются кнопки не ActiveX Control:
Название (Caption) берётся из ячеек колонки B . OnAction макрос который должен активировать лист.
Вопрос, как при нажатие на любую из этих кнопок перейти к соответствующему листу взятого из название кнопки ?
Знаю что можно отдельно для каждой кнопки написать макрос типа: ThisWorkbook.Worksheets("Sheet2").Activate и так далее... Но планируется наличие свыше 15-ти листов в книге соответственно и кнопок будет такое же количество и писать столько кода для каждой кнопки для активации нужных листов не хочется. Файл пример прикладываю как есть.
Спасибо всем!
| Код |
|---|
Option Explicit
Private Sub Workbook_Open()
Dim i As Long
Application.ScreenUpdating = False
ThisWorkbook.Worksheets("Sheet1").Range("B2:B" & ThisWorkbook.Worksheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Row).ClearContents
For i = 1 To Sheets.Count
If ThisWorkbook.Sheets(i).Name <> "Sheet1" Then
Application.DisplayAlerts = False
ThisWorkbook.Worksheets("Sheet1").Cells(i, 2) = Sheets(i).Name
Application.DisplayAlerts = True
End If
Next
Application.ScreenUpdating = True
End Sub
|
Далее, при при активации первого листа (или переходе с другого листа) создаются кнопки не ActiveX Control:
| Код |
|---|
Option Explicit Private Sub Worksheet_Activate() Dim i As Long, iRow As Long Dim t As Range Dim btn As Button iRow = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row Application.ScreenUpdating = False ActiveSheet.Buttons.Delete For i = 2 To iRow Set t = ActiveSheet.Range(Cells(i, 3), Cells(i, 3)) Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height) With btn .OnAction = "btnS" & i .Caption = ActiveSheet.Cells(i, 2).Text .Name = "CommandButton" & i End With Next i Application.ScreenUpdating = True End Sub |
Название (Caption) берётся из ячеек колонки B . OnAction макрос который должен активировать лист.
Вопрос, как при нажатие на любую из этих кнопок перейти к соответствующему листу взятого из название кнопки ?
Знаю что можно отдельно для каждой кнопки написать макрос типа: ThisWorkbook.Worksheets("Sheet2").Activate и так далее... Но планируется наличие свыше 15-ти листов в книге соответственно и кнопок будет такое же количество и писать столько кода для каждой кнопки для активации нужных листов не хочется. Файл пример прикладываю как есть.
Спасибо всем!