Использование VBA Excel для скрытия и отображения вкладок - PullRequest
0 голосов
/ 13 сентября 2018

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

Например: я запускаю отчет за сентябрь 2018 года. Я открываю отчет, на видимых вкладках отображается «Aug18». Я хочу запустить макрос, в котором автоматически будут скрыты вкладки «Aug18» и не будут скрыты вкладки «Sep18». Любая помощь будет принята с благодарностью. Спасибо!

1 Ответ

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

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) Внутри этого цикла конвертируйте тест, если это рабочий лист с именем месяца. Используя 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
...