Знатоки подскажите, как можно сделать, что бы автоматически создавался новый лист по графику (к примеру в 6 утра, или наступлении новой даты) и при этом данные из столбца C переносились в столбец А.
Подробнее : Есть таблица(прилагается), где столбцы T U V остаток на утро, W X Y Z AA AB поступление в течении дня, AC AD AE итог на вечер. Нужно, что бы с утра был новый лист (наименованием даты создания) копия предыдущего с остатками вчерашнего дня в столбцах T U V, а столцы W X Y Z AA AB обнулены. Можно так сделать?
Заранее спасибо
приложите файл,плз
Приложил
в модуль книги добавьте событие на открытие книги
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
Спасибо большое :))
Хотел еще спросить, если к примеру пару дней таблицу не открывали. То возникнет ошибка как я понял?
Как правильно скорректировать, так что бы, либо создавались все листы за пропущенные даты, или создавался текущий сегодняшний лист, с пропуском дней когда таблица не открывалась, то есть после 20.06 шел 22.06, но данные переходили с 20 на 22
Цитата: 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
Спасибо. ;)