Страницы: 1
RSS
Переход между листами с условиями: видимый и не видимый лист и один активный лист
 
Здравствуйте!
Я готовлю отчёт и мне необходимо сделать его в такой форме, чтоб при открытии книги была один видимый Лист "Главная". А после нажатия Листа "Главная", чтоб открылся Лист "Содержание", а Лист "Главная" автоматическая скрылась, т..е сделать чтоб всегда был активен один Лист в данной книге. При нажатии отчёта на Листе "Содержание", чтоб открылся Лист "Отчёт1. стр. (1), а Лист "Содержание" становился скрытым, и.т д.
Переходы между Листами сделал с помощью кнопки элемента Active X, единственное сделал гиперссылку на Листе "Содержание". А вот остальную часть не могу выполнить, как сделать видимый и не видимый лист в зависимости от перехода между Листами. Прошу Вашего содействия в данном вопросе.
Изменено: Tatar - 03.03.2026 16:51:05
 
Цитата
Tatar написал: чтоб при открытии книги была один видимый Лист "Главная". А после нажатия Листа "Главная", чтоб открылся Лист "Содержание", а Лист "Главная" автоматическая скрылась
Это сделано, См.файл
Дальше не понятно какие листы и при каких нажатиях должны отображаться/скрываться
Согласие есть продукт при полном непротивлении сторон
 
Так?
Код
Private Sub Следующий_Click()
    Worksheets("Отчёт1. стр. (2)").Visible = True
    Worksheets("Отчёт1. стр. (2)").Activate
    Me.Visible = False
End Sub
 
Исправил макросы на листах, кроме Содержания.
 
Добавил формирование листа Содержание и ещё по мелочи.
Код
Public Sub FormToc(sh As Worksheet)
    Const skip = "Главная Содержание Результаты"
    Dim aSkip As Variant
    aSkip = Split(skip, " ")
    
    Dim nn As Long
    nn = ThisWorkbook.Worksheets.Count - (UBound(aSkip) + 1)
    nn = WorksheetFunction.RoundUp(Sqr(nn), 0)
    
    Dim arr As Variant, xa As Long, ya As Long
    ReDim arr(1 To nn, 1 To nn)
    ya = 1
    
    Dim iSh As Worksheet
    For Each iSh In ThisWorkbook.Worksheets
        If InStr(skip, iSh.Name) = 0 Then
            xa = xa + 1
            If xa > UBound(arr, 2) Then
                xa = 1
                ya = ya + 1
            End If
            arr(ya, xa) = iSh.Name
        End If
    Next
    
    Dim rr As Range
    Set rr = sh.Range("B2").Resize(UBound(arr, 1), UBound(arr, 2))
    rr.Value = arr
    rr.EntireColumn.AutoFit
End Sub
 
Sanja, ничего не кликабельно, и кодов никаких нет, как будто сохранено без содержание макросов или что-то я не так делаю?
 
МатросНаЗебре, в файле макросы не наблюдаются, и гиперссылка или какой-либо иный переход не активен. файл как будто пустой без кодов или сохранён без поддержания макросов.
 
Цитата
написал:
или что-то я не так делаю?
Этот вариант. Что-то не так делаете, надо делать что-то так.
 
МатросНаЗебре, я понял в чём была причина, антивирус блокировал файл с макросом и скачивал файл в безопасном режиме без макроса. Скачал с макросом.
Файл работает, большое Вам спасибо.
Единственное можете объяснить, если я создам Отчёт2. стр. (1), Отчёт2. стр. (2), Отчёт3. стр. (1), Отчёт3. стр. (2), и т.д. но где мне внести изменения чтоб ссылки были так же активны на переход например для Листов Отчёт2. стр. (1), Отчёт2. стр. (2), Отчёт3. стр. (1), Отчёт3. стр. (2) или лучше переделать Лист "Содержание" на кнопки элемента Active X ? Как можно это реализовать? Подскажите пожалуйста.
 
Я бы сделал выпадающий список с Названиями отчетов и номерами страниц и при выборе из него нужной страницы переходил на этот лист.
Заморочки с кучей кнопок,тем более ActiveX могут сильно усложнить процесс и раздуть файл
П.С. ActiveX могут быть отключены на каком нибудь ПК
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
если я создам Отчёт2. стр. (1), Отчёт2. стр. (2), Отчёт3. стр. (1), Отчёт3. стр. (2), и т.д. но где мне внести изменения
В моём макросе список создаётся автоматически. Рукам изменения можно не вносить.
 
Офф.
Если у Вас будет 10 отчетов по 5 страниц? Или 100?
Я так понимаю, что отчеты однотипные, поэтому грамотнее будет формировать их 'на лету' из какой-то одной исходной таблицы
Создать Бланк Отчета и уже его заполнять при необходимости нужными данными
Заполнение бланков данными из таблицы
Это как возможный вариант
Согласие есть продукт при полном непротивлении сторон
 
Sanja, спасибо, ознакомлюсь с данным материалом.
 
МатросНаЗебре, понял, спасибо Вам большое.
 
МатросНаЗебре, я ещё хотел уточнить, а можно ли сделать так, чтоб в Листе "Содержание" отображалась только первая страница отчёта, т.к. если у меня будет порядка 30 отчётов и в них множества страниц, то у меня будет отображаться слишком много надписей Листов.
Например в Листе "Содержание" чтоб отображался Отчёт1 стр. (1), а другие Листы Отчёт1 стр. (2) ... Отчёт1 стр. (5) не отображались на Листе "Содержание", и так далее чтоб Отчёт2 стр. (1) отображалась на Листе "Содержание" , а другие Листы Отчёт2 стр. (2) ... Отчёт2 стр. (5) - не отображались на Листе "Содержание".
Чтоб что-то типа этого отображалось:

Помогите пожалуйста с этим.
 
Офф. В продолжение сообщения #12
Цитата
Tatar написал: у меня будет порядка 30 отчётов и в них множества страниц
А если пользователю нужно будет перейти со 2й странцы(допустим) отчета на 8ю (например)? Ему придется нажимать на кнопку 'Следующая страница' 6 раз, по очереди на разных страницах. Еще не мешало бы предусмотреть переход на ПРЕДЫДУЩУЮ страницу :D
Я про то, что концепция с переходом по страницам по очереди, так себе.
Может хотя-бы открывать сразу ВСЕ страницы одного отчета? Пользователь будет перемещаться по нужным страницам отчета щелкая по ярлыкам листов
Но это так - мысли вслух
Согласие есть продукт при полном непротивлении сторон
 
Такой вариант.
 
МатросНаЗебре, спасибо, протестировал. Нашёл себе подходящее  8)
Страницы: 1
Читают тему
Наверх