Цикл непрерывного переключения рабочих листов

У меня есть электронная таблица Excel для отображения диаграмм данных SQL, которые будут отображаться на мониторе в нашем механическом цехе.

В электронной таблице 45 вкладок, и мне нужно переключаться между вкладками с интервалом 10 секунд на вкладку, а затем возвращаться на первую вкладку и повторять цикл.

Я нашел Как я могу изменить листы Excel с временным интервалом 5 секунд один за другим, используя код VB с помощью макроса?).

Как сделать цикл кода бесконечным?

Вот код по ссылке:

Sub StartSlideShow()
    Application.OnTime Now + TimeValue("00:00:05"), "ShowNextSheet"
End Sub

Sub ShowNextSheet()
    Dim lastIndex As Integer, nextShtIndex As Integer

    lastShtIndex = Worksheets.Count
    nextShtIndex = ActiveSheet.Index + 1

    If nextShtIndex <= lastShtIndex Then
        Worksheets(nextShtIndex).Select
        StartSlideShow
    Else
        MsgBox "End of slide show"
    End If
End Sub

Из любопытства, должно ли «слайд-шоу» работать 24 часа в сутки?

Zack E 10.04.2019 19:08

Да, это правильно. Эта таблица будет работать 24 часа в сутки.

dausfaul 10.04.2019 21:54

Тогда ответ ниже будет работать, просто не забудьте изменить Application.OnTime Now + TimeValue("00:00:05"), "ShowNextSheet" на Application.OnTime Now + TimeValue("00:00:10"), "ShowNextSheet", так как вы хотите, чтобы изменение происходило каждые 10 секунд.

Zack E 10.04.2019 22:16
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
3
271
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Код, который вы сейчас используете, проверяет, меньше ли индекс следующего листа, чем последний индекс книги (или равен ему). Если это не так (это означает, что вы просмотрели все свои листы), приложение закрывается. В вашем случае вы не хотите завершать приложение, поэтому в случае, если индекс следующего листа больше, чем последний лист, просто выберите первый лист вручную и перезапустите код.

If nextShtIndex <= lastShtIndex Then
    Worksheets(nextShtIndex).Select
    StartSlideShow
Else
    Worksheets(1).Select
    StartSlideShow
End If

Я обновил код, чтобы он выглядел следующим образом: Sub StartSlideShow() Application.OnTime Now + TimeValue("00:00:05"), "ShowNextSheet" End Sub Sub ShowNextSheet() Dim lastIndex As Integer, nextShtIndex As Integer lastShtIndex = Worksheets.Count nextShtIndex = ActiveSheet.Index + 1 If nextShtIndex <= lastShtIndex Then Worksheets(nextShtIndex).Select StartSlideShow Else Worksheets(1).Select StartSlideShow End If End Sub Он сообщает об ошибке выполнения «1004». Не удалось выбрать метод класса рабочего листа. Говорит, что строка Worksheets(nextShtIndex).Select является проблемой.

dausfaul 10.04.2019 22:59

Выяснил, что вызывало ошибку - скрытый лист прерывал последовательность, Отобразил лист, и он начал работать.

dausfaul 10.04.2019 23:44

@dausfaul Приятно слышать. Скрытые листы выбрать нельзя.

basodre 11.04.2019 02:51

Другие вопросы по теме