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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2011, 13:59   #11
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Вариант:
Код:
Option Explicit
Dim t#
Sub Main()
    Dim i As Integer
    For i = 1 To 500
        Obrabotka_tabl
        Do While t + 5 > Timer
            DoEvents
        Loop
    Next
End Sub

Public Sub Obrabotka_tabl()
    MsgBox "ok"    ' Здесь код процедуры
    t = Timer ' Это в конец процедуры
End Sub
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 18.06.2011 в 14:02.
kuklp вне форума Ответить с цитированием
Старый 18.06.2011, 15:49   #12
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию

Цитата:
Метод OnTime работает совсем не так. Вышеприведенный оператор назначает старт процедуры Obrabotka_tabl через 5 секунд, при этом выполнение программы продолжается.
Совершенно верно, вы правы. Но вместе с кодом DoEvents получается именно то, что я хочу.


Задача такая: Есть основной код программы (main). Из этого кода запускается несколько макросов ( например №1 и №2) для обработки таблицы. Макросы запускаются друг за другом.

Причем, макрос №2 запускаются только после завершения работы №1, так как требуется время на завершение обработки таблицы №1.


main должен выполняться постоянно, т.е. зациклен.

При итерации main должна быть предусмотрена пауза, секунд 5, в которую управление передается пользователю.
-Anton- вне форума Ответить с цитированием
Старый 18.06.2011, 16:02   #13
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию

В общем, решил сделать так.

Объявил глобальную переменную Obrab_tabl_zak as boolean

В макросе Obrabotka_tabl, в самом конце поставил Obrab_tabl_zak = true


А в main вставил проверку после вызова макроса

Код:
  Obrab_tabl_zak = False
  
  Application.OnTime Now + TimeValue("00:00:05"), "Obrabotka_tabl"

  Do While Obrab_tabl_zak = False
  DoEvents
  Loop
-Anton- вне форума Ответить с цитированием
Старый 18.06.2011, 16:07   #14
-Anton-
Пользователь
 
Регистрация: 09.06.2011
Сообщений: 21
По умолчанию

Цитата:
Вариант:
вот. сначала написал, потом ваше сообщение увидел.
По сути, то же самое сделал.
-Anton- вне форума Ответить с цитированием
Старый 18.06.2011, 17:22   #15
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

И при этом процессор (или одно ядро, которое ведет процесс VBA) загружен(о) на 100%

Попробуйте так:
Код:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Main()
Dim i&
For i = 1 To 500
    Obrabotka_tabl
    Obrabotka_tabl_1
    Sleep 5000
Next
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 18.06.2011, 18:17   #16
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Леш, во время Sleep ничего нельзя сделать с таблицей, а с DoEvents можно.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ожидание завершения потоков Voody Общие вопросы Delphi 11 14.06.2016 06:10
Отмена закрытия консольного окна после завершения работы приложения FeloS Общие вопросы C/C++ 21 25.02.2011 16:34
Ожидание завершения процесса Человек-Ололо Общие вопросы Delphi 2 08.03.2010 19:39
Как программно вызвать окно завершения работы UfoRoot Win Api 4 21.01.2009 11:15
Перехват завершения работы ОС vynt Win Api 7 19.05.2008 08:59