Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2009, 13:33   #1
Ranel
 
Регистрация: 31.10.2008
Сообщений: 5
По умолчанию Как приостановить выполнение макроса на определенное время?

Добрый день! Подскажите, пожалуйста, как приостановить выполнение макроса на определенное время?

Дело в том, что примерно в середине выполнения мкроса должны обновиться запросы, тянущие данные из Access. Но они не успевают обновляться, т.к. макрос продолжает свое выполнение дальше. Вот если бы можно было приостановить макрос секунд на 10-15...
Ranel вне форума Ответить с цитированием
Старый 11.06.2009, 13:45   #2
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Пауза в 1 секунду:
Код:

Application.Wait (Now + TimeValue("0:00:01"))
pivas вне форума Ответить с цитированием
Старый 11.06.2009, 14:47   #3
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию

Цитата:
Сообщение от Ranel Посмотреть сообщение
Добрый день! Подскажите, пожалуйста, как приостановить выполнение макроса на определенное время?

Дело в том, что примерно в середине выполнения мкроса должны обновиться запросы, тянущие данные из Access. Но они не успевают обновляться, т.к. макрос продолжает свое выполнение дальше. Вот если бы можно было приостановить макрос секунд на 10-15...
Уважаемый Ranel, что-то я не понял.
Вы пишите
Цитата:
Сообщение от Ranel Посмотреть сообщение
... обновиться запросы, тянущие данные из Access.
Вы что обновляете запрос в Accesse!? Это очень интересно. хотелось бы посмотреть как это Вы умудрились сделать. Максимум что у меня получалось это изменить скрипт MS SQL сервера, и запустить его с помощью программы isql.exe
Но самое главное что пока не обновится запрос программа дальше не должна выполнятся. (прийдет ответ о успешном или неуспешном выполнении команды)
Если вы изменяете запрос в Excele, то скорее всего вы изменяете строчку выборки значений из accessa. В этом случае все иначе. Чтение инфы с помощью макроса осуществляется с помощью так называемого скрипта запроса, который включается в момент подключения к базе. Поэтому без закрытия предыдущего запроса вызвать новый у Вас скорее всего не удастся или удастся только частично.
В своей программе я всегда закрываю предыдущие запросы примерно сл. образом
Код:
Dim st as string, bd as string, iu as string
Dim Conn As ADODB.Connection
Dim oRes As ADODB.Recordset
Dim oCmd As ADODB.Command
bd= "c:\db.mdb" 'необходимая база данных
Set Conn = New ADODB.Connection
With Conn
    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0"
    .Open bd
End With 'создание соедининя с базой данных (Access)
do while _условие
    ....
    iu="_условие" ' изменяемый запрос
    st = "Select * FROM Events WHERE"+iu + " ORDER BY _сортировка"
      Set oCmd = New ADODB.Command
      Set oCmd.ActiveConnection = Conn
      With oCmd
         .CommandText = st
         .CommandType = adCmdText
         .Execute
      End With ' подключение к внутренней БД Access (открытие запроса)
      Set oRes = New ADODB.Recordset
      Set oRes.ActiveConnection = Conn
      oRes.Open oCmd ' подключение к записям ограниченными запросом
    ....
      Set oRes = Nothing 'отключение от записей запроса
      Set oCmd = Nothing 'отсоединение от внутренней БД Access (закрытие запроса)
loop
третья и вторая строчки с конца закрывают предыдущий запрос и позволяют открыть новый.
И самое главное что в этом случае, пока не будет выполнена строчка на следующую программа не перейдет.
Поэтой причине я не думаю что необходимо останавливать выполнение программы на некоторое время.
Другое дело если вы имеете дело с динамическими базами. записи в которых обновляются каждые NN секунд/
В этом случае необходимо задержка просто необходима и она указана в посте №2
Юнлинг вне форума Ответить с цитированием
Старый 11.06.2009, 15:35   #4
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

Цитата:
Сообщение от pivas Посмотреть сообщение
Пауза в 1 секунду:
Код:

Application.Wait (Now + TimeValue("0:00:01"))
прокомментируйте:

Important The Wait method suspends all Microsoft Excel activity and may prevent you from performing other operations on your computer while Wait is in effect. However, background processes such as printing and recalculation continue.

что еще относится к фоновым действиям кроме пересчета и печати?
slan вне форума Ответить с цитированием
Старый 11.06.2009, 16:07   #5
Ranel
 
Регистрация: 31.10.2008
Сообщений: 5
По умолчанию

Огромное спасибо за советы!

К сожалению, моя идея на счет приостановки макроса неверна оказалась, запросы на это время тоже приостанавливаются и обновление не происходит

Запросы у меня, конечно же в Excel. Меняются они при изменении строки выборки значений из Access.
В моем макросе нет вообще подключения к базам данных. Запросы обновляются, при изменении условия (в ячейке). Все это работает, если убрать цикл... Но без цикла мой макрос теряет смысл.

Попробую разобраться со сложным (для меня) кодом открытия/закрытия запросов.
Ranel вне форума Ответить с цитированием
Старый 11.06.2009, 16:57   #6
VSD
Новичок
Джуниор
 
Регистрация: 09.04.2009
Сообщений: 2
По умолчанию

Попробуйте в “Свойствах диапазона данных” (запросе) убрать птичку “Фоновое обновление“.
VSD вне форума Ответить с цитированием
Старый 16.06.2009, 09:27   #7
Ranel
 
Регистрация: 31.10.2008
Сообщений: 5
По умолчанию

СУПЕРРРРР!!!!!
Вся проблема в "птичке" оказалась )))))))) Теперь все работает!
Даже не представляете как помогли! Тупая работа по размножению двухсот файлов свелась к 15 минутам вместо целого дня )))))))))
Ranel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как отключить отображение изменений во время выполнения макроса? AnnNet Microsoft Office Excel 1 15.04.2009 14:43
Выполнение макроса во всех листах Bu$ter Microsoft Office Excel 18 14.11.2008 14:34
Выполнение действия в заданное время WOWan234 Помощь студентам 6 02.05.2007 01:52
Определенное время Lonix Общие вопросы Delphi 11 18.03.2007 09:37
как сделать, чтобы в определенное время появлялось новое окно Alar Общие вопросы Delphi 0 29.10.2006 20:30