Добрый день. В файле 4 запроса PQ. Их нужно обновить 4 раза в день. В 6, 12, 18 и 24 часа. Макрос обновления запроса я нашел.
Код
Sub Refresh_One_Query()
ThisWorkbook.Connections("Запрос — Заказы1").Refresh
Workbooks.Application.DisplayAlerts = False
Excel.ActiveWorkbook.Save
Application.Quit
End Sub
Но это немного не то. Если файл запустился в 6-05 запрос не обновляется.
Помогите пожалуйста сделать чтобы макрос запускал макрос в зависимости от времени. Если время с 00-00 до 6-00 запускается обновление Запрос — Заказы1 если время с 6-00 до 12-00 запускается обновление Запрос — Заказы2 и т..д.
kolyaya, после выполнения пусть куда-то выводит время обновления (например в ячейку первого листа А1) и когда повторно он будет запускаться пусть проверяет разницу во времени между временем системы и то что в ячейке и там уже выполнять или не выполнять. а вообще по какому событию должен срабатывать макрос?
kolyaya написал: К сожалению я совсем плохо в vba разбираюсь.
Первый пост явно касающийся VBA был опубликован вами в прошлом году в сентябре. Прошло больше полугода - уже можно было бы какую-нибудь книжку освоить, что бы не было плохо
1. чтобы обновления данных в заданное время происходило из Excel нужно вообще НИКОГДА не закрывать этот файл 2. чтобы открыть ЛЮБОЙ файл в заданное время - это задача операционной системы, которая не имеет к Excel НИКАКОГО отношения и решается средствами операционной системы или специализированным ПО а что нужно вам?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Недавно столкнулся с такой же проблемой, и нашел очень простой выход! Вам понадобится планировщик заданий - стандартная утилита виндовс. Планировщик расположен: Пуск - Средства администрирования - Планировщик заданий.
Создаем блокнот вписываем ваши данные, заменяя в конце txt на vbs. Название.vbs - обязательно сохраняем как кодировку ANSI . Далее настраиваем планировщик на необходимое вам время и все.
Call Run_macros
Sub Run_macros()
Dim objExcel
Dim Op_writ
Dim Wb
'запускаем Excel-процесс
Set objExcel = CreateObject ("Excel.Application")
objExcel.Visible = true
Op_writ="R:\.... (путь к файлу)"
Set Wb = objExcel.Workbooks.Open (Op_writ)
'запуск макроса
objExcel.run "Название макроса - Заказы1 "
'сохранение файла
objExcel.Workbooks("Название файла.xlsm").Save
'по завершению закрываем документ. Пишем только имя файла, без пути
objExcel.Workbooks("Название файла.xlsm").Close(false)
'закрываем Excel-процесс
objExcel.Quit
Set objExcel = Nothing
Set Wb = Nothing
End Sub
Молодое_Поколение написал: 'сохранение файла objExcel.Workbooks("Название файла.xlsm").Save 'по завершению закрываем документ. Пишем только имя файла, без пути objExcel.Workbooks("Название файла.xlsm").Close(false)
всё это можно записать одной строкой:
Код
'по завершению закрываем документ С СОХРАНЕНИЕМ. Пишем только имя файла, без пути
objExcel.Workbooks("Название файла.xlsm").Close(true)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Потому что будет вот так. Файл уже открыт в другом экземпляре Excel. Следовательно ваш код откроет файл только для чтения. При попытке сохранить будет вот такой вот вопрос. Чуть изменённый код вашего vbs
Скрытый текст
Код
Call Run_macros
Sub Run_macros()
Dim objExcel
Dim Op_writ
Dim Wb
'запускаем Excel-процесс
Set objExcel = CreateObject ("Excel.Application")
objExcel.Visible = true
Op_writ="C:\Path\гист.xlsx"
Set Wb = objExcel.Workbooks.Open (Op_writ)
'запуск макроса
'objExcel.run "Название макроса - Заказы1 "
'Макрос не запускам, просто меняем значение
Wb.ActiveSheet.Range("A1").Value = 100500
'сохранение файла
objExcel.Workbooks("гист.xlsx").Save
'по завершению закрываем документ. Пишем только имя файла, без пути
objExcel.Workbooks("гист.xlsx").Close(false)
'закрываем Excel-процесс
objExcel.Quit
Set objExcel = Nothing
Set Wb = Nothing
End Sub