Есть несколько вопросов, и я был бы очень признателен, если бы Вы мне помогли.
Имеется макрос, который выполняет несколько функций (обновляет книгу, копирует одни ячейки, вставляет другие и т.д.). Он прикручен к кнопке запуска.
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
SkyPro Да-да, я прочитал про использование метода Application.OnTime, однако не совсем понял, можно ли в TimeValue("время") указывать сразу несколько нужных значений, либо нужно на каждое значение делать свой Application.OnTime. Ну и вопросы 2 и 3 тоже актуальны.
SkyPro Да-да, я прочитал про использование метода Application.OnTime, однако не совсем понял, можно ли в TimeValue("время") указывать сразу несколько нужных значений, либо нужно на каждое значение делать свой Application.OnTime. Ну и вопросы 2 и 3 тоже актуальны.ArkaIIIa
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.]На будущее: иногда достаточно просто попробовать, что-либо сделать, что бы получить результат.
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
skypro1111@gmail.com
Сообщение отредактировал SkyPro - Вторник, 10.06.2014, 12:40
[offtop]Michael_S, сейчас возьму в кавычки А вообще, имел ввиду, что есть более лаконичные способы решения с перекрестной ссылкой на процедуры, но она может вызвать проблемы, которые описаны в пункте 2 темы.
[offtop]Michael_S, сейчас возьму в кавычки А вообще, имел ввиду, что есть более лаконичные способы решения с перекрестной ссылкой на процедуры, но она может вызвать проблемы, которые описаны в пункте 2 темы.SkyPro
skypro1111@gmail.com
Сообщение отредактировал SkyPro - Вторник, 10.06.2014, 12:41
SkyPro Извиняюсь, что еще раз отвлекаю... Подскажите, пожалуйста. У меня макрос "Update_" записан в модуле, куда нужно вставлять макрос Application.OnTime , в модуль или в "Эту книгу"? И допускает ли он подобный формат (24-часовой) или нужно обязательно указание AM/PM ? Просто, вот такая его конфигурация - не работает :-( [vba]
SkyPro Извиняюсь, что еще раз отвлекаю... Подскажите, пожалуйста. У меня макрос "Update_" записан в модуле, куда нужно вставлять макрос Application.OnTime , в модуль или в "Эту книгу"? И допускает ли он подобный формат (24-часовой) или нужно обязательно указание AM/PM ? Просто, вот такая его конфигурация - не работает :-( [vba]
ойму это ваш случай. У вас же каждые 30 мин и не придётся хардкодить!
Вопрос в том, что запуск должен происходить в определенное время (как я понял) + запуск по кнопке, который собьет счетчик (now). В общем, лучше один раз "похардкорить", чем потом выискивать баги.
ойму это ваш случай. У вас же каждые 30 мин и не придётся хардкодить!
Вопрос в том, что запуск должен происходить в определенное время (как я понял) + запуск по кнопке, который собьет счетчик (now). В общем, лучше один раз "похардкорить", чем потом выискивать баги.SkyPro
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]
честно признаюсь - не проверил, но похож на рабочий
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