Как скрыть и показать вкладки

У меня есть ежемесячный отчет, в котором отображается информация за предыдущий месяц. (Со временем я извлечу обновленную информацию в отчет.)

Я хочу автоматически скрывать вкладки предыдущего месяца и открывать вкладки текущего месяца.

Например: для сентября 2018 г. На видимых вкладках отображается «18 августа». Я хочу, чтобы вкладки «18 августа» были автоматически скрыты, а вкладки «18 сентября» не были скрыты.

рабочие листы («Имя листа»). visible = xlHidden

Guest 13.09.2018 22:09
0
1
261
1

Ответы 1

1) Получите текущую дату в формате, который мы можем использовать для тестирования логики типа «Больше чем» ГГГГММ:

Dim currentDate As String
currentDate=Format(Now(), "YYYYMM")

2) Прокрутите свои рабочие листы:

Dim currentDate As String
currentDate=Format(Now(), "YYYYMM")

Dim ws as Worksheet
For Each ws in ThisWorkbook.Worksheets

Next ws

3) Внутри этого цикла convert test, если это рабочий лист с именем месяц. Здесь используется InStr:

Dim currentDate As String
currentDate = Format(Now(), "YYYYMM")

Dim ws As Worksheet
Dim thisTabDate As String
For Each ws In ThisWorkbook.Worksheets

    'Test to see if this is in the right format
    If InStr(1, "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", Left(ws.Name, 3)) Then            
    End If
 Next ws

4) Если это так, отформатируйте имя вкладки так, чтобы оно было таким же ГГГГММ, и установите его видимость.

Dim currentDate As String
currentDate = Format(Now(), "YYYYMM")

Dim ws As Worksheet
Dim thisTabDate As String
For Each ws In ThisWorkbook.Worksheets

    'Test to see if this is in the right format
    If InStr(1, "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", Left(ws.Name, 3)) Then
        'This is messy, but we are just cutting the tab name up, turning it into an actual date, and then formatting that.
        thisTabDate = Format(CDate(Left(ws.Name, 3) & "-01-" & Right(ws.Name, 2)), "YYYYMM")

        'Set the visible True/False to the result of the test
        ws.Visible = (thisTabDate >= currentDate)
    End If
 Next ws

@ Marcucciboy2 спасибо. Код по-прежнему работает, но выглядит уродливее. Фиксированный.

JNevill 13.09.2018 22:34

Чтобы не усложнять - но разве вы также не должны убедиться, что хотя бы 1 рабочий лист всегда виден?

BigBen 13.09.2018 22:36

@BigBen Этот метод должен работать, если существует сентябрьский лист, вам не кажется? Это просто ошибка, когда все равно дойдет до конца

Marcucciboy2 13.09.2018 22:39

Может, можно попробовать выделить лист на основе Left(MonthName(Month(Now))),3) и все остальное скрыть?

Marcucciboy2 13.09.2018 22:40

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

JNevill 13.09.2018 22:41

@ Marcucciboy2, это, вероятно, было бы намного чище. Я пошел с преобразованием в YYYYMM, думая, что «любой лист меньше текущей даты», но потом просто использовал сравнение = ... Я могу изменить его на >=, так что вся эта дополнительная работа того стоит.

JNevill 13.09.2018 22:42

Думаю, я пытался скрыть их всех, а вместо этого он просто кричал на меня. Да, есть масса способов справиться с этим

Marcucciboy2 13.09.2018 22:45

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