Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выполнение макроса в заданное время - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выполнение макроса в заданное время (Макросы/Sub)
Выполнение макроса в заданное время
ArkaIIIa Дата: Вторник, 10.06.2014, 11:46 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
Добрый день, господа!

Есть несколько вопросов, и я был бы очень признателен, если бы Вы мне помогли.

Имеется макрос, который выполняет несколько функций (обновляет книгу, копирует одни ячейки, вставляет другие и т.д.). Он прикручен к кнопке запуска.

1) Какую строчку нужно добавить в код, чтобы запрограммировать макрос на выполнение в заданное время? Т.е. мне нужно, чтобы он выполнялся в 9:10, 9:40, 10:10, 10:40 и т.д.
2) В случае, если макрос нужно будет запустить "вручную" через кнопку запуска, не будет ли он выдавать ошибку из-за реализации п.1.?
3) В случае, если пользователь отошел от компьютера и заблокировал его (не выходя из учетной записи и не закрывая файл), будет ли макрос выполняться в указанное время?

Заранее благодарю за помощь!

П.С. На всякий случай код макроса:

[vba]
Код
Sub Update_()
     Path_1 = "F:\File.xls"
     iFileDateTime_1 = FileDateTime(Path_1)
     Cells(27, 11) = iFileDateTime_1
     ActiveWorkbook.UpdateLink Name:= _
         "F:\File.xls", Type:=xlExcelLinks
Dim R As Range
Dim rngX As Range
Dim X As Integer
          
Set R = Sheets(7).Rows(2).Find(Sheets(7).[B1].Text, , xlValues, xlWhole)
Set rngX = Sheets(7).[B3:B140]
          
If Not R Is Nothing Then
     Sheets(7).Select
     rngX.Copy
     R.Offset(1).PasteSpecial Paste:=xlPasteValues
     Set rngX = Selection
     For X = 1 To rngX.Columns.Count
         rngX.Cells(1, X).Offset(141 - rngX.Cells(1, X).Row).Value = Now
     Next X
End If
     Sheets(1).Select
End Sub
[/vba]
 
Ответить
СообщениеДобрый день, господа!

Есть несколько вопросов, и я был бы очень признателен, если бы Вы мне помогли.

Имеется макрос, который выполняет несколько функций (обновляет книгу, копирует одни ячейки, вставляет другие и т.д.). Он прикручен к кнопке запуска.

1) Какую строчку нужно добавить в код, чтобы запрограммировать макрос на выполнение в заданное время? Т.е. мне нужно, чтобы он выполнялся в 9:10, 9:40, 10:10, 10:40 и т.д.
2) В случае, если макрос нужно будет запустить "вручную" через кнопку запуска, не будет ли он выдавать ошибку из-за реализации п.1.?
3) В случае, если пользователь отошел от компьютера и заблокировал его (не выходя из учетной записи и не закрывая файл), будет ли макрос выполняться в указанное время?

Заранее благодарю за помощь!

П.С. На всякий случай код макроса:

[vba]
Код
Sub Update_()
     Path_1 = "F:\File.xls"
     iFileDateTime_1 = FileDateTime(Path_1)
     Cells(27, 11) = iFileDateTime_1
     ActiveWorkbook.UpdateLink Name:= _
         "F:\File.xls", Type:=xlExcelLinks
Dim R As Range
Dim rngX As Range
Dim X As Integer
          
Set R = Sheets(7).Rows(2).Find(Sheets(7).[B1].Text, , xlValues, xlWhole)
Set rngX = Sheets(7).[B3:B140]
          
If Not R Is Nothing Then
     Sheets(7).Select
     rngX.Copy
     R.Offset(1).PasteSpecial Paste:=xlPasteValues
     Set rngX = Selection
     For X = 1 To rngX.Columns.Count
         rngX.Cells(1, X).Offset(141 - rngX.Cells(1, X).Row).Value = Now
     Next X
End If
     Sheets(1).Select
End Sub
[/vba]

Автор - ArkaIIIa
Дата добавления - 10.06.2014 в 11:46
SkyPro Дата: Вторник, 10.06.2014, 11:50 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Посмотрите вот сюда:
http://msdn.microsoft.com/en-us....5).aspx


skypro1111@gmail.com
 
Ответить
СообщениеПосмотрите вот сюда:
http://msdn.microsoft.com/en-us....5).aspx

Автор - SkyPro
Дата добавления - 10.06.2014 в 11:50
ArkaIIIa Дата: Вторник, 10.06.2014, 11:58 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
SkyPro
Да-да, я прочитал про использование метода Application.OnTime, однако не совсем понял, можно ли в TimeValue("время") указывать сразу несколько нужных значений, либо нужно на каждое значение делать свой Application.OnTime. Ну и вопросы 2 и 3 тоже актуальны.
 
Ответить
СообщениеSkyPro
Да-да, я прочитал про использование метода Application.OnTime, однако не совсем понял, можно ли в TimeValue("время") указывать сразу несколько нужных значений, либо нужно на каждое значение делать свой Application.OnTime. Ну и вопросы 2 и 3 тоже актуальны.

Автор - ArkaIIIa
Дата добавления - 10.06.2014 в 11:58
SkyPro Дата: Вторник, 10.06.2014, 12:19 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
1. В модуль книги.[vba]
Код
Private Sub Workbook_Open()
Application.OnTime TimeValue("12:30:00"), "Update_"
Application.OnTime TimeValue("12:30:10"), "Update_"
Application.OnTime TimeValue("12:30:20"), "Update_"
End Sub
[/vba]
2. Нет.
3. Будет.

Считаю, что лучшим вариантом будет прописать на каждый запуск отдельную строку. Хоть это и "рассовоневерно", но поможет избежать геморроя.

[p.s.]На будущее: иногда достаточно просто попробовать, что-либо сделать, что бы получить результат.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Вторник, 10.06.2014, 12:40
 
Ответить
Сообщение1. В модуль книги.[vba]
Код
Private Sub Workbook_Open()
Application.OnTime TimeValue("12:30:00"), "Update_"
Application.OnTime TimeValue("12:30:10"), "Update_"
Application.OnTime TimeValue("12:30:20"), "Update_"
End Sub
[/vba]
2. Нет.
3. Будет.

Считаю, что лучшим вариантом будет прописать на каждый запуск отдельную строку. Хоть это и "рассовоневерно", но поможет избежать геморроя.

[p.s.]На будущее: иногда достаточно просто попробовать, что-либо сделать, что бы получить результат.

Автор - SkyPro
Дата добавления - 10.06.2014 в 12:19
ArkaIIIa Дата: Вторник, 10.06.2014, 12:31 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
SkyPro
Спасибо большое за помощь!
На будущее - попытаюсь перебороть свои опасения при внесении каких-либо изменений в макросы.)
 
Ответить
СообщениеSkyPro
Спасибо большое за помощь!
На будущее - попытаюсь перебороть свои опасения при внесении каких-либо изменений в макросы.)

Автор - ArkaIIIa
Дата добавления - 10.06.2014 в 12:31
SkyPro Дата: Вторник, 10.06.2014, 12:33 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Не пытайтесь. Просто делаете копию книги и меняете.

ЗЫ: Случайно репу вам повысил.


skypro1111@gmail.com
 
Ответить
СообщениеНе пытайтесь. Просто делаете копию книги и меняете.

ЗЫ: Случайно репу вам повысил.

Автор - SkyPro
Дата добавления - 10.06.2014 в 12:33
Michael_S Дата: Вторник, 10.06.2014, 12:35 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
[offtop]
рассовоневерно
что за слово?
[/offtop]
 
Ответить
Сообщение[offtop]
рассовоневерно
что за слово?
[/offtop]

Автор - Michael_S
Дата добавления - 10.06.2014 в 12:35
ArkaIIIa Дата: Вторник, 10.06.2014, 12:35 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
SkyPro
Незаслуженно) так что можете минуснуть до исходной единицы)
А вот я Вам плюсану)
 
Ответить
СообщениеSkyPro
Незаслуженно) так что можете минуснуть до исходной единицы)
А вот я Вам плюсану)

Автор - ArkaIIIa
Дата добавления - 10.06.2014 в 12:35
SkyPro Дата: Вторник, 10.06.2014, 12:39 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
[offtop]Michael_S, сейчас возьму в кавычки :)
А вообще, имел ввиду, что есть более лаконичные способы решения с перекрестной ссылкой на процедуры, но она может вызвать проблемы, которые описаны в пункте 2 темы.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Вторник, 10.06.2014, 12:41
 
Ответить
Сообщение[offtop]Michael_S, сейчас возьму в кавычки :)
А вообще, имел ввиду, что есть более лаконичные способы решения с перекрестной ссылкой на процедуры, но она может вызвать проблемы, которые описаны в пункте 2 темы.

Автор - SkyPro
Дата добавления - 10.06.2014 в 12:39
ArkaIIIa Дата: Вторник, 10.06.2014, 13:54 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
SkyPro
Извиняюсь, что еще раз отвлекаю...
Подскажите, пожалуйста. У меня макрос "Update_" записан в модуле, куда нужно вставлять макрос Application.OnTime , в модуль или в "Эту книгу"?
И допускает ли он подобный формат (24-часовой) или нужно обязательно указание AM/PM ?
Просто, вот такая его конфигурация - не работает :-(
[vba]
Код
Private Sub Workbook_Open()
Application.OnTime TimeValue("09:05:00"), "Update_"
Application.OnTime TimeValue("09:35:00"), "Update_"
Application.OnTime TimeValue("10:05:00"), "Update_"
Application.OnTime TimeValue("10:35:00"), "Update_"
Application.OnTime TimeValue("11:05:00"), "Update_"
Application.OnTime TimeValue("11:35:00"), "Update_"
Application.OnTime TimeValue("12:05:00"), "Update_"
Application.OnTime TimeValue("12:35:00"), "Update_"
Application.OnTime TimeValue("13:05:00"), "Update_"
Application.OnTime TimeValue("13:35:00"), "Update_"
Application.OnTime TimeValue("14:05:00"), "Update_"
Application.OnTime TimeValue("14:35:00"), "Update_"
Application.OnTime TimeValue("15:05:00"), "Update_"
Application.OnTime TimeValue("15:35:00"), "Update_"
Application.OnTime TimeValue("16:05:00"), "Update_"
Application.OnTime TimeValue("16:35:00"), "Update_"
Application.OnTime TimeValue("17:05:00"), "Update_"
Application.OnTime TimeValue("17:35:00"), "Update_"
Application.OnTime TimeValue("18:05:00"), "Update_"
Application.OnTime TimeValue("18:35:00"), "Update_"
Application.OnTime TimeValue("19:05:00"), "Update_"
Application.OnTime TimeValue("19:35:00"), "Update_"
Application.OnTime TimeValue("20:05:00"), "Update_"
Application.OnTime TimeValue("20:35:00"), "Update_"
Application.OnTime TimeValue("21:05:00"), "Update_"
Application.OnTime TimeValue("21:35:00"), "Update_"
Application.OnTime TimeValue("22:05:00"), "Update_"
Application.OnTime TimeValue("22:35:00"), "Update_"
Application.OnTime TimeValue("23:05:00"), "Update_"
Application.OnTime TimeValue("23:35:00"), "Update_"
End Sub
[/vba]
 
Ответить
СообщениеSkyPro
Извиняюсь, что еще раз отвлекаю...
Подскажите, пожалуйста. У меня макрос "Update_" записан в модуле, куда нужно вставлять макрос Application.OnTime , в модуль или в "Эту книгу"?
И допускает ли он подобный формат (24-часовой) или нужно обязательно указание AM/PM ?
Просто, вот такая его конфигурация - не работает :-(
[vba]
Код
Private Sub Workbook_Open()
Application.OnTime TimeValue("09:05:00"), "Update_"
Application.OnTime TimeValue("09:35:00"), "Update_"
Application.OnTime TimeValue("10:05:00"), "Update_"
Application.OnTime TimeValue("10:35:00"), "Update_"
Application.OnTime TimeValue("11:05:00"), "Update_"
Application.OnTime TimeValue("11:35:00"), "Update_"
Application.OnTime TimeValue("12:05:00"), "Update_"
Application.OnTime TimeValue("12:35:00"), "Update_"
Application.OnTime TimeValue("13:05:00"), "Update_"
Application.OnTime TimeValue("13:35:00"), "Update_"
Application.OnTime TimeValue("14:05:00"), "Update_"
Application.OnTime TimeValue("14:35:00"), "Update_"
Application.OnTime TimeValue("15:05:00"), "Update_"
Application.OnTime TimeValue("15:35:00"), "Update_"
Application.OnTime TimeValue("16:05:00"), "Update_"
Application.OnTime TimeValue("16:35:00"), "Update_"
Application.OnTime TimeValue("17:05:00"), "Update_"
Application.OnTime TimeValue("17:35:00"), "Update_"
Application.OnTime TimeValue("18:05:00"), "Update_"
Application.OnTime TimeValue("18:35:00"), "Update_"
Application.OnTime TimeValue("19:05:00"), "Update_"
Application.OnTime TimeValue("19:35:00"), "Update_"
Application.OnTime TimeValue("20:05:00"), "Update_"
Application.OnTime TimeValue("20:35:00"), "Update_"
Application.OnTime TimeValue("21:05:00"), "Update_"
Application.OnTime TimeValue("21:35:00"), "Update_"
Application.OnTime TimeValue("22:05:00"), "Update_"
Application.OnTime TimeValue("22:35:00"), "Update_"
Application.OnTime TimeValue("23:05:00"), "Update_"
Application.OnTime TimeValue("23:35:00"), "Update_"
End Sub
[/vba]

Автор - ArkaIIIa
Дата добавления - 10.06.2014 в 13:54
SkyPro Дата: Вторник, 10.06.2014, 14:01 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Пробовали закрыть файл и открыть?
[vba]
Код
Private Sub Workbook_Open()
[/vba]
Событие открытия книги.


skypro1111@gmail.com
 
Ответить
СообщениеПробовали закрыть файл и открыть?
[vba]
Код
Private Sub Workbook_Open()
[/vba]
Событие открытия книги.

Автор - SkyPro
Дата добавления - 10.06.2014 в 14:01
ArkaIIIa Дата: Вторник, 10.06.2014, 14:09 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
SkyPro
Протупил. Спасибо, сейчас все в порядке.
 
Ответить
СообщениеSkyPro
Протупил. Спасибо, сейчас все в порядке.

Автор - ArkaIIIa
Дата добавления - 10.06.2014 в 14:09
Матраскин Дата: Вторник, 10.06.2014, 15:04 | Сообщение № 13
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
можно ли в TimeValue("время") указывать сразу несколько нужных значений


ArkaIIIa, я посмотрел первую ссылку которую сбросил SkyPro и нашёл:

Цитата
This example runs my_Procedure 15 seconds from now.
VBA
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"


пойму это ваш случай. У вас же каждые 30 мин и не придётся хардкодить!


в интернете опять кто-то не прав
 
Ответить
Сообщение
можно ли в TimeValue("время") указывать сразу несколько нужных значений


ArkaIIIa, я посмотрел первую ссылку которую сбросил SkyPro и нашёл:

Цитата
This example runs my_Procedure 15 seconds from now.
VBA
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"


пойму это ваш случай. У вас же каждые 30 мин и не придётся хардкодить!

Автор - Матраскин
Дата добавления - 10.06.2014 в 15:04
SkyPro Дата: Вторник, 10.06.2014, 15:16 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Цитата Матраскин, 10.06.2014 в 15:04, в сообщении № 13
ойму это ваш случай. У вас же каждые 30 мин и не придётся хардкодить!

Вопрос в том, что запуск должен происходить в определенное время (как я понял) + запуск по кнопке, который собьет счетчик (now).
В общем, лучше один раз "похардкорить", чем потом выискивать баги.


skypro1111@gmail.com
 
Ответить
Сообщение
Цитата Матраскин, 10.06.2014 в 15:04, в сообщении № 13
ойму это ваш случай. У вас же каждые 30 мин и не придётся хардкодить!

Вопрос в том, что запуск должен происходить в определенное время (как я понял) + запуск по кнопке, который собьет счетчик (now).
В общем, лучше один раз "похардкорить", чем потом выискивать баги.

Автор - SkyPro
Дата добавления - 10.06.2014 в 15:16
Матраскин Дата: Вторник, 10.06.2014, 15:54 | Сообщение № 15
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
SkyPro, оно да, но нет!
[vba]
Код
        Public sostoyanie As Boolean

         Sub Procedura_2_Zapusk()
             sostoyanie = True
         Procedura_2
         End Sub
          
         Sub Procedura_2_Otmena()
             sostoyanie = False
         End Sub

         Sub Procedura_2()
             Application.OnTime Time + TimeSerial(0, 0, 5), "Proc"
         End Sub
          
         Sub Proc()
             MsgBox "Время вышло!", vbInformation, "Пример таймера"
         If sostoyanie = True Then Procedura_2
         End Sub
[/vba]

по мойму очень даже...можно придумать что то классное! я прям чувствую


в интернете опять кто-то не прав
 
Ответить
СообщениеSkyPro, оно да, но нет!
[vba]
Код
        Public sostoyanie As Boolean

         Sub Procedura_2_Zapusk()
             sostoyanie = True
         Procedura_2
         End Sub
          
         Sub Procedura_2_Otmena()
             sostoyanie = False
         End Sub

         Sub Procedura_2()
             Application.OnTime Time + TimeSerial(0, 0, 5), "Proc"
         End Sub
          
         Sub Proc()
             MsgBox "Время вышло!", vbInformation, "Пример таймера"
         If sostoyanie = True Then Procedura_2
         End Sub
[/vba]

по мойму очень даже...можно придумать что то классное! я прям чувствую

Автор - Матраскин
Дата добавления - 10.06.2014 в 15:54
SkyPro Дата: Вторник, 10.06.2014, 16:26 | Сообщение № 16
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Матраскин, прям вот так вот и думал, но все равно, как привязать запуск к конкретному времени?


skypro1111@gmail.com
 
Ответить
СообщениеМатраскин, прям вот так вот и думал, но все равно, как привязать запуск к конкретному времени?

Автор - SkyPro
Дата добавления - 10.06.2014 в 16:26
Матраскин Дата: Вторник, 10.06.2014, 17:04 | Сообщение № 17
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
SkyPro,
[vba]
Код
Private Sub Workbook_Open()
     Min = Format(Time, "Nn")
     If (Min > 5 And Min < 30) Then
         Min = 30 - Min
     ElseIf (Min > 30) Then
         Min = 60 - Min + 5
     ElseIf (Min = 30 Or Min = 5) Then
         Procedura_2_Zapusk
         Exit Sub
     End If
     Application.OnTime Now + TimeSerial(0, Min, 0), "Procedura_2_Zapusk"
End Sub
[/vba]

честно признаюсь - не проверил, но похож на рабочий ;)


в интернете опять кто-то не прав

Сообщение отредактировал Матраскин - Вторник, 10.06.2014, 17:09
 
Ответить
СообщениеSkyPro,
[vba]
Код
Private Sub Workbook_Open()
     Min = Format(Time, "Nn")
     If (Min > 5 And Min < 30) Then
         Min = 30 - Min
     ElseIf (Min > 30) Then
         Min = 60 - Min + 5
     ElseIf (Min = 30 Or Min = 5) Then
         Procedura_2_Zapusk
         Exit Sub
     End If
     Application.OnTime Now + TimeSerial(0, Min, 0), "Procedura_2_Zapusk"
End Sub
[/vba]

честно признаюсь - не проверил, но похож на рабочий ;)

Автор - Матраскин
Дата добавления - 10.06.2014 в 17:04
SkyPro Дата: Вторник, 10.06.2014, 17:24 | Сообщение № 18
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Матраскин, спасибо. (тоже проверять не буду, но принцип понятен) :)


skypro1111@gmail.com
 
Ответить
СообщениеМатраскин, спасибо. (тоже проверять не буду, но принцип понятен) :)

Автор - SkyPro
Дата добавления - 10.06.2014 в 17:24
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выполнение макроса в заданное время (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!