Здравствуйте. Помогите пожалуйста. Мне нужно чтобы макрос создавал лист с названием текущей даты и копировал определенные ячейки с листа с предыдущей датой. Т.е. сегодня я нажимаю на макрос, он создает новый лист у которого название 25/12/2018 и затем он копирует определенные ячейки с листа 24/12/2018. Как создать лист и переименовать его в текущую дату я понял, но затем макрос обращается к листу с конкретным названием, а нужно чтобы он обращался к листу со вчерашней датой.
Здравствуйте. Помогите пожалуйста. Мне нужно чтобы макрос создавал лист с названием текущей даты и копировал определенные ячейки с листа с предыдущей датой. Т.е. сегодня я нажимаю на макрос, он создает новый лист у которого название 25/12/2018 и затем он копирует определенные ячейки с листа 24/12/2018. Как создать лист и переименовать его в текущую дату я понял, но затем макрос обращается к листу с конкретным названием, а нужно чтобы он обращался к листу со вчерашней датой.dmtgrs
' d = Date With Sheets((d - 1) & ""): arr = Range(.Cells(3, 8), .Cells(3, 8).End(xlDown)): End With Sheets.Copy After:=Sheets(Sheets.Count) With ActiveSheet .Name = Date 'Format(Now, "yyyy/mm/dd") Range("D3:G" & .Cells(.Rows.Count, 7).End(xlUp).Row).ClearContents .Cells(3, 4).Resize(UBound(arr), 1) = arr End With End Sub
[/vba]
Добрый день. Поправил немного [vba]
Код
Sub НовыйДень() ' ' НовыйДень Макрос '
' d = Date With Sheets((d - 1) & ""): arr = Range(.Cells(3, 8), .Cells(3, 8).End(xlDown)): End With Sheets.Copy After:=Sheets(Sheets.Count) With ActiveSheet .Name = Date 'Format(Now, "yyyy/mm/dd") Range("D3:G" & .Cells(.Rows.Count, 7).End(xlUp).Row).ClearContents .Cells(3, 4).Resize(UBound(arr), 1) = arr End With End Sub
dmtgrs, Вы каждый-каждый день работаете? Выходные и праздники тоже? Предлагаю такой вариант (заодно проваряет наличие сегодняшнего листа) [vba]
Код
Sub tt() On Error Resume Next aaa = Sheets(Date & "").Cells(1).Value If Err = 0 Then MsgBox "Лист ''" & Date & "'' уже есть" Exit Sub End If On Error GoTo 0 Application.ScreenUpdating = 0 Application.Calculation = 3 Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count) With ActiveSheet .Name = Date r1_ = .Cells(.Rows.Count, 1).End(3).Row .Range("D3:D" & r1_) = .Range("H3:H" & r1_).Value .Range("E3:G" & r1_).ClearContents End With Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub
[/vba]
dmtgrs, Вы каждый-каждый день работаете? Выходные и праздники тоже? Предлагаю такой вариант (заодно проваряет наличие сегодняшнего листа) [vba]
Код
Sub tt() On Error Resume Next aaa = Sheets(Date & "").Cells(1).Value If Err = 0 Then MsgBox "Лист ''" & Date & "'' уже есть" Exit Sub End If On Error GoTo 0 Application.ScreenUpdating = 0 Application.Calculation = 3 Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count) With ActiveSheet .Name = Date r1_ = .Cells(.Rows.Count, 1).End(3).Row .Range("D3:D" & r1_) = .Range("H3:H" & r1_).Value .Range("E3:G" & r1_).ClearContents End With Application.Calculation = 1 Application.ScreenUpdating = 1 End Sub
Класс!!! Спасибо огромное!!! я тоже тут намучился, но что-то получилось, не знаю на сколько правильно)) То что у вас вылезает сообщение, для меня это вообще верх мастерства!!!
У меня так получилось, попробую разобраться как у вас так хитро сообщение вылетает [vba]
Класс!!! Спасибо огромное!!! я тоже тут намучился, но что-то получилось, не знаю на сколько правильно)) То что у вас вылезает сообщение, для меня это вообще верх мастерства!!!
У меня так получилось, попробую разобраться как у вас так хитро сообщение вылетает [vba]
Очень просто - обращаемся к первой ячейке листа с сегодняшней датой. Если ошибки нет, то это означает, что такой лист уже есть, тогда пишем ругалку и выходим из макроса
Очень просто - обращаемся к первой ячейке листа с сегодняшней датой. Если ошибки нет, то это означает, что такой лист уже есть, тогда пишем ругалку и выходим из макроса_Boroda_