Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / помогите с проблемой (макрос который бы работал в зависимости от текущей даты) / 21 сообщений из 21, страница 1 из 1
29.08.2006, 16:33:28
    #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
29.08.2006, 17:23:27
    #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
29.08.2006, 18:35:28
    #33950737
wall
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
Спасибо!
...
Рейтинг: 0 / 0
29.08.2006, 18:47:03
    #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
29.08.2006, 19:43:12
    #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
29.08.2006, 20:19:05
    #33950908
mg@
mg@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
я бы убрал
Код: plaintext
Sh.Activate
:)
...
Рейтинг: 0 / 0
29.08.2006, 20:23:46
    #33950916
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
mg@я бы убрал
Код: plaintext
Sh.Activate
:)
В данном случае, эту строку убирать нельзя. Потому что на неактивном листе нельзя ничего выбрать.
...
Рейтинг: 0 / 0
29.08.2006, 20:46:55
    #33950945
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
White Owl mg@я бы убрал
Код: plaintext
Sh.Activate
:)
В данном случае, эту строку убирать нельзя. Потому что на неактивном листе нельзя ничего выбрать.
White Owl, точно
...
Рейтинг: 0 / 0
29.08.2006, 20:50:00
    #33950949
ref
ref
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
У меня примерно такая же проблемма! а как сделать то-же, но кроме первого листа например? подскажите пожалуйста
...
Рейтинг: 0 / 0
29.08.2006, 21:03:25
    #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
29.08.2006, 21:04:19
    #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
29.08.2006, 21:18:18
    #33950993
ref
ref
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
Огромнейшее спасибо! :)
...
Рейтинг: 0 / 0
29.08.2006, 23:05:04
    #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
30.08.2006, 08:08:37
    #33951246
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
White OwlНо убрать Sh.Activate все же нужно, потому что глупо дерагать страницы без толку. А после этого еще и области зачем-то выбирать.

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

Application.ScreenUpdating = False
................
Application.ScreenUpdating = True
...
Рейтинг: 0 / 0
31.08.2006, 17:47:20
    #33956458
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
vallotА если так:
Application.ScreenUpdating = False
................
Application.ScreenUpdating = TrueЭто поможет от моргания. Но время на фактическое переключение страниц и никому не нужный выбор диапазонов все равно будет тратится.
...
Рейтинг: 0 / 0
31.08.2006, 18:18:11
    #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
31.08.2006, 18:50:21
    #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
31.08.2006, 21:01:50
    #33956838
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
White OwlТак в чем конкретно это "не та задача"?
имел в виду, чтобы ей уделять столько обсуждения
...
Рейтинг: 0 / 0
31.08.2006, 21:11:06
    #33956843
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с проблемой (макрос который бы работал в зависимости от текущей даты)
vbapro White OwlТак в чем конкретно это "не та задача"?
имел в виду, чтобы ей уделять столько обсужденияЛюбой задаче нужно уделять столько времени сколько потребуется чтобы решить ее правильно.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / помогите с проблемой (макрос который бы работал в зависимости от текущей даты) / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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