Автоматическое создание нового листа

Автор Tosha Shufer, 21.06.2018, 13:15

« назад - далее »

Tosha Shufer

Знатоки подскажите, как можно сделать, что бы автоматически создавался новый лист по графику (к примеру в 6 утра, или наступлении новой даты) и при этом данные из столбца C переносились в столбец А.
Подробнее : Есть таблица(прилагается), где столбцы T U V остаток на утро, W X Y Z AA AB поступление в течении дня, AC AD AE итог на вечер. Нужно, что бы с утра был новый лист (наименованием даты создания) копия предыдущего с остатками вчерашнего дня в столбцах T U V, а столцы W X Y Z AA AB  обнулены. Можно так сделать?

Заранее спасибо

boa

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Tosha Shufer


boa

в модуль книги добавьте событие на открытие книги
Private Sub Workbook_Open()
Dim sh As Worksheet
Dim D As String
D = Format(Date, "DD.MM")
    For Each sh In Worksheets
        If sh.Name = D Then Exit Sub
    Next
    MsgBox "Сейчас будет добавлен новый лист """ & D & """", vbInformation  '   вывод сообщения можно закомментировать
    Sheets(Format(Date - 1, "DD.MM")).Copy After:=Sheets(Format(Date - 1, "DD.MM"))
    Set sh = Sheets(Sheets(Format(Date - 1, "DD.MM")).Index + 1)
    With sh
        .Name = D
        .Range("T5:V18").Value = .Range("AC5:AE18").Value
        .Range("W5:AB18").Value = 0
    End With
End Sub
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Tosha Shufer


Tosha Shufer

Хотел еще спросить, если к примеру пару дней таблицу не открывали. То возникнет ошибка как я понял?
Как правильно скорректировать, так что бы, либо создавались все листы за пропущенные даты, или создавался текущий сегодняшний лист, с пропуском дней когда таблица не открывалась, то есть после 20.06 шел 22.06, но данные переходили с 20 на 22

boa

Цитата: Tosha Shufer от 21.06.2018, 15:08
Хотел еще спросить, если к примеру пару дней таблицу не открывали. То возникнет ошибка как я понял?

да
что бы ошибок не возникало и лист все равно создавался измените код
Private Sub Workbook_Open()
Dim sh As Worksheet
Dim D As String, D1$, i%
D = Format(Date, "DD.MM")
    For Each sh In Worksheets
        If sh.Name = D Then Exit Sub
    Next
    MsgBox "Сейчас будет добавлен новый лист """ & D & """", vbInformation  '   вывод сообщения можно закомментировать
    Do
        i = i + 1
        D1 = Format(Date - i, "DD.MM")
        For Each sh In Worksheets
            If sh.Name = D1 Then Exit Do
        Next
    Loop
    Sheets(D1).Copy After:=Sheets(D1)
    Set sh = Sheets(Sheets(D1).Index + 1)
    With sh
        .Name = D
        .Range("T5:V18").Value = .Range("AC5:AE18").Value
        .Range("W5:AB18").Value = 0
    End With
End Sub
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Tosha Shufer