Формула для идентификации невидимых листов - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть следующая простая электронная таблица Excel:

        A               
1    Sheet1    =MID(CELL("filename",Sheet1!K1),FIND("]",CELL("filename",Sheet1!K1))+1,255)
2    Sheet2    =MID(CELL("filename",Sheet2!K1),FIND("]",CELL("filename",Sheet2!K1))+1,255)
3    Sheet3    =MID(CELL("filename",Sheet3!K1),FIND("]",CELL("filename",Sheet3!K1))+1,255)
4    Sheet4    =MID(CELL("filename",Sheet4!K1),FIND("]",CELL("filename",Sheet4!K1))+1,255)
5    Sheet5    =MID(CELL("filename",Sheet5!K1),FIND("]",CELL("filename",Sheet5!K1))+1,255)
6
7

В Column A есть список всех листов в файле Excel.
Я перечисляю листы по формуле, которую вы видите рядом с ней.

Пока все это прекрасно работает.


Теперь может случиться, что некоторые листы в моей электронной таблице невидимы (скрыты). В этом случае я хочу, чтобы эти листы не появлялись в списке выше. Поэтому мне интересно, есть ли формула, которая может определить, является ли лист видимым или нет. Примерно так:

IF MID(CELL("filename",Sheet1!K1),FIND("]",CELL("filename",Sheet1!K1))+1,255) = Invisible THEN ""

У вас есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 13 сентября 2018

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

Я чувствую, что что-то становится более сложным, чем необходимо; либо XY Проблема , либо некоторые дубликаты данных, которыми вы пытаетесь управлять без их реорганизации. : -)

Независимо от того, насколько я понимаю ваш вопрос, нет встроенных функций для выполнения того, что вам нужно, но эти примеры VBA должны дать вам несколько идей:

В этой процедуре перечислены все видимые рабочие листы в окне «Немедленное окно» (чтобы просмотреть его, нажмите Ctrl + G из VBA):

Sub ListSheets()  'list in immediate window
    Dim sht As Worksheet
    For Each sht In Worksheets
        If sht.Visible = xlSheetVisible Then Debug.Print sht.Name
    Next sht
End Sub

Эта процедура аналогична исключению, перечисляет их на активном листе, оставляя пробелы для скрытых листов (как и подразумевает ваш пример):

Sub ListSheets()  'list on worksheet
    Dim sht As Worksheet
    For Each sht In Worksheets
        If sht.Visible = xlSheetVisible Then Range("A" & sht.Index) = sht.Name
    Next sht
End Sub

Эта функция может быть вызвана из формулы листа и отображает имя листа, которое вы указываете по номеру индекса. Он возвращает "" (пустая строка / ничего), если для рабочего листа не задано значение Visible или если он не существует.

Function listSheet(shtNum As Long) As String
    On Error Resume Next
    If Sheets(shtNum).Visible = xlSheetVisible Then listSheet = Sheets(shtNum).Name
End Function

img


Примечание по теме:

Существует три типа видимости рабочего листа.

img


Подробнее:

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