В Excel VBA как я могу определить, сколько вкладок рабочего листа в настоящее время в представлении в нижней части окна ..? - PullRequest
1 голос
/ 21 октября 2019

В Excel VBA 2007, как я могу определить, какие вкладки рабочего листа в настоящее время отображаются в нижней части окна ..? Я не вижу никаких свойств объекта для такой вещи.

Обратите внимание, что этот вопрос НЕ задает , скрыты ли какие-либо рабочие листы в настоящее время , скорее, я ищу количество вкладоккоторые в настоящее время отображаются на панели вкладок в нижней части окна.

В идеале любая такая функция должна возвращать начальный индексный номер или имя рабочего листа, а также конечный индекс или счетчик,или, возможно, Range листов для отображаемых в данный момент вкладок.

Я вижу функцию ScrollWorkbookTabs, но она к этому не относится. Также объект worksheet.Tab не имеет связанных свойств, например, что-то, называемое .WithinView.

Я бы включил пример кода, но даже не могу найти место для начала.

1 Ответ

0 голосов
/ 21 октября 2019

Я знаю, что это не совсем то, что вы просили, но вот мой ответ. Это делает своего рода «гоночный» желтый цвет на четырех вкладках листа слева направо. Я выбрал не вспыхивать на активном рабочем листе, потому что полоса прокрутки могла быть прокручена влево или вправо и не отображать этот активный рабочий лист во время анимации.
Чтобы упростить пример, я решил не сохранять какие-либо существующие цвета листа, номожет быть реализовано при необходимости.

Option Explicit

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Private Sub Workbook_NewSheet(ByVal Sh As Object)

    '' "lens flare" when adding a new worksheet

    Dim delay As Long

    Dim i As Long
    For i = 1 To Sheets.Count + 3

        ''color tab yellow
        If i <= Sheets.Count Then
            Sheets(i).Tab.Color = vbYellow
        End If

        ''clear trailing tab color
        If i > 3 Then
            Sheets(i - 3).Tab.ColorIndex = xlColorIndexNone
        End If

        ''pause for 150ms -> 30ms
        delay = IIf(Sheets.Count < Round((160 - 30) / 5), 160 - (Sheets.Count * 5), 30)
        Sleep delay

    Next i

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...