powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
21 сообщений из 21, страница 1 из 1
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950311
wall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Ситуация такая: в Excel есть лист1 в нем в ячейках A1:E1 -формулы подсчета сумм
нужно написать макрос который бы работал в зависимости от текущей даты, т.е. предположим сегодня 01.01.06 нужно чтобы программа,при нажатии на кнопку скопировала формулы из A1:E1 в A2:E2 а затем скопировала и вставила значения в A1:E1, а завтра 02.01.06 при нажатии на ту же кнопку копировались формулы уже из A2:E2 в A3:E3 и затем копировались и вставлялись значения в A2:E2 и т.д. до конца месяца затем заново с A1:E1.
Подскажите как это сделать
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950499
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub Macro1()
Dim DayNum As Integer

    DayNum = Day(Now)
    Range("A" & DayNum & ":E" & DayNum).Copy
    Range("A" & DayNum +  1 ).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("A" & DayNum +  1 ).Select
End Sub
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950737
wall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950763
wall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вопросик...

если у именя много листов и на всех нужно проделать эту операцию неужели мне придется для всех писать вот так
Sub Macro1()
Dim DayNum As Integer

DayNum = Day(Now)
Range("A" & DayNum & ":E" & DayNum).Copy
Range("A" & DayNum + 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A" & DayNum + 1).Select
Sheets("Лист2").Select
DayNum = Day(Now)
Range("A" & DayNum & ":E" & DayNum).Copy
Range("A" & DayNum + 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A" & DayNum + 1).Select
и т.д
End Sub
или можно как то по короче?
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950868
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если для всех листов, то можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub Macro1()
Dim DayNum As Integer
Dim Sh As Worksheet
    
    DayNum = Day(Now)

    For Each Sh In ActiveWorkbook.Sheets
        With Sh
            Sh.Activate
            .Range("A" & DayNum & ":E" & DayNum).Copy
            .Range("A" & DayNum +  1 ).Select
            .Paste
            Application.CutCopyMode = False
            .Range("A" & DayNum +  1 ).Select
        End With
    Next Sh

End Sub

если не для всех, то нужно какое-то однозначное отличие на листе сделать по которому можно определить, какой листо обрабатывать, а какой нет. или перечень всех нужных листов иметь.. что-то такое.. :)
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950908
mg@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mg@
Гость
я бы убрал
Код: plaintext
Sh.Activate
:)
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950916
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mg@я бы убрал
Код: plaintext
Sh.Activate
:)
В данном случае, эту строку убирать нельзя. Потому что на неактивном листе нельзя ничего выбрать.
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950945
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl mg@я бы убрал
Код: plaintext
Sh.Activate
:)
В данном случае, эту строку убирать нельзя. Потому что на неактивном листе нельзя ничего выбрать.
White Owl, точно
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950949
ref
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня примерно такая же проблемма! а как сделать то-же, но кроме первого листа например? подскажите пожалуйста
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950971
mg@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mg@
Гость
и ваще оставил только так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub Macro1()
Dim DayNum As Integer
Dim Sh As Worksheet
    
    DayNum = Day(Now)

    For Each Sh In ActiveWorkbook.Sheets
        With Sh
            Sh.Activate
            .Range("A" & DayNum & ":E" & DayNum).Copy
            .Range("A" & DayNum +  1 ).Paste
            Application.CutCopyMode = False
        End With
    Next Sh

End Sub
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950972
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, например, для книги, в которой нужно пропустить листы с названиями "ИмяЛиста1", "ИмяЛиста2", "ИмяЛиста3". Ясно, что можно изменить количество листов. Ориентироваться на номер листа не желательно, если вы его точно не знаете, лучше по имени.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub Macro1()
Dim DayNum As Integer
Dim Sh As Worksheet
    
    DayNum = Day(Now)

    For Each Sh In ActiveWorkbook.Sheets
        With Sh
            If Not ((Sh.Name Like "ИмяЛиста1") _
                Or (Sh.Name Like "ИмяЛиста2") _
                Or (Sh.Name Like "ИмяЛиста3")) _
            Then
                Sh.Activate
                .Range("A" & DayNum & ":E" & DayNum).Copy
                .Range("A" & DayNum +  1 ).Select
                .Paste
                Application.CutCopyMode = False
                .Range("A" & DayNum +  1 ).Select
            End If
        End With
    Next Sh
End Sub
Также в условие проверки можно поставить любое выражение...
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33950993
ref
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромнейшее спасибо! :)
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33951090
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbapro White Owl mg@я бы убрал
Код: plaintext
Sh.Activate
:)
В данном случае, эту строку убирать нельзя. Потому что на неактивном листе нельзя ничего выбрать.
White Owl, точноТочно, то точно. Но убрать Sh.Activate все же нужно, потому что глупо дерагать страницы без толку. А после этого еще и области зачем-то выбирать.
Код: plaintext
1.
2.
    For Each Sh In ActiveWorkbook.Sheets
        Sh.Range("A" & DayNum & ":E" & DayNum).Copy Destination:= Sh.Range("A" & DayNum +  1 )
    Next Sh
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33951246
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНо убрать Sh.Activate все же нужно, потому что глупо дерагать страницы без толку. А после этого еще и области зачем-то выбирать.

пользователю лучше видеть, что у него на листе что-то произошло, не думаю, что это на самом деле глупо. А код сделать короче, ясное дело, можно
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33953818
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbaproпользователю лучше видеть, что у него на листе что-то произошло, не думаю, что это на самом деле глупо.Для сообщений пользователю существует MsgBox, и Application.StatusBar. А еще можно написать что-нибудь напрямую на лист. Выбирай на вкус.
А моргать страницами во время работы это значит на несколько порядков замедлить скорость работы макроса и заставить пользователя любоваться стробоскопом от которого быстро устают глаза.
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33956221
vallot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если так:

Application.ScreenUpdating = False
................
Application.ScreenUpdating = True
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33956458
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vallotА если так:
Application.ScreenUpdating = False
................
Application.ScreenUpdating = TrueЭто поможет от моргания. Но время на фактическое переключение страниц и никому не нужный выбор диапазонов все равно будет тратится.
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33956550
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, в общем случае я согласен, с тем, что ты написал. Но это не та задача... Проверь сам:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub Macro1()
Dim i As Integer
Dim DayNum As Integer
Dim Sh As Worksheet
    
    Workbooks.Add
    
    For i =  1  To  50 
        Sheets.Add
    Next i
  
    DayNum = Day(Now)

    For Each Sh In ActiveWorkbook.Sheets
        With Sh
            Sh.Activate
            .Range("A" & DayNum & ":E" & DayNum).Copy
            .Range("A" & DayNum +  1 ).Select
            .Paste
            Application.CutCopyMode = False
            .Range("A" & DayNum +  1 ).Select
        End With
    Next Sh

End Sub

Впрочем, все это на вкус wall
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33956645
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbaproWhite Owl, в общем случае я согласен, с тем, что ты написал. Но это не та задача... Проверь сам:В каком месте это "не та задача"?
Вот два куска макросов:

Мой:
Код: plaintext
1.
2.
    For Each Sh In ActiveWorkbook.Sheets
        Sh.Range("A" & DayNum & ":E" & DayNum).Copy Destination:= Sh.Range("A" & DayNum +  1 )
    Next Sh
и твой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    For Each Sh In ActiveWorkbook.Sheets
        With Sh
            Sh.Activate
            .Range("A" & DayNum & ":E" & DayNum).Copy
            .Range("A" & DayNum +  1 ).Select
            .Paste
            Application.CutCopyMode = False
            .Range("A" & DayNum +  1 ).Select
        End With
    Next Sh
Покажи мне, что твой делает такого чего не делает мой? Вот вижу, что мой не сдвигает курсор после копирования. Но в первоначальной задаче этого и не требовалось. И в дальнейшем никто не просил двигать курсор, так зачем ты его двигаешь? Копируют оба макроса одинаково, только мой это делает быстрее и писать его меньше. Так в чем конкретно это "не та задача"?
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33956838
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТак в чем конкретно это "не та задача"?
имел в виду, чтобы ей уделять столько обсуждения
...
Рейтинг: 0 / 0
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
    #33956843
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbapro White OwlТак в чем конкретно это "не та задача"?
имел в виду, чтобы ей уделять столько обсужденияЛюбой задаче нужно уделять столько времени сколько потребуется чтобы решить ее правильно.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]