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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2011, 02:19   #11
clever77
Пользователь
 
Регистрация: 13.04.2011
Сообщений: 58
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)


Sub PauseExample()
Dim t As Single
t = Timer
Sleep 100
MsgBox Timer - t
End Sub
Спасибо теперь понятно
А то я по не грамотности
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

непосредственно в текст программы Sub////End sub вписывал

Одной проблемой меньше.
clever77 вне форума Ответить с цитированием
Старый 05.05.2011, 03:11   #12
clever77
Пользователь
 
Регистрация: 13.04.2011
Сообщений: 58
По умолчанию

Нашел автозапуск макроса другим макросом
И вся программа будет примерно выглядеть так
Если время 10:00, то управление передается в save_1, а если 19:00, то обратнов Auto_Open


Остались 2 вопроса:
1. Что нужно что бы включился 1 макрос Auto_Open? Надо открыть Excel, эту книгу (файл) и запустить 1 макрос в ручную, а он в опр время запустит второй или что то изменить в настройках самого Excel
Ведь пока файл не открыт, то и макрос не активен.....
Можно ли сделать что бы макрос запускался автоматически при открытии книги? Дело в том что прога которая пересылает данные в EXCEL сама открывает нужный файл, а это и есть 1 момент поступления данных......
2.Как организовать остановку программы в ручную, ну к примеру день предпраздничный короткий, а прога еще час работать будет, привязано ко времени....
К примеру ввести переменную L в тело цикла по умолчанию равно 1, а если нажать одновременно 1+2+3 изм на ноль (как это сделать?). А в цикле проверку 1 работаем, 0 выход. И как при необходимости возобновить запись данных, если нажатие было к примеру случайным, не с начальной позиции, а с того места где закончили..... Пусть и с потерей тех данных пока программа не активна


Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

sub Auto_Open()
Application.OnTime TimeValue("10:00:00"),"save_1"
End sub

Sub save_1()
...................................
3: For j = 1 To 21
............................
10: If Application.Now= TimeValue("19:00:00") Then GoTo 1
..........................
sleep 100
GoTo 3

1: Range("A25") = Time
Range("A32") = Range("A25").Value
End Sub
clever77 вне форума Ответить с цитированием
Старый 05.05.2011, 03:32   #13
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

1. поместить его в программный модуль

sub Auto_Open()
If Now > Date + 10 / 24 Then
save_1
Else
Application.OnTime Date + 10/24, "save_1"
end if
End sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 05.05.2011, 05:15   #14
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Здесь есть код для запуска макроса через заданное количество миллисекунд:

Цитата:
10. Использование Application.OnTime с задержкой меньше секунды

Код:
Sub ЗапускМакросаСНебольшойЗадержкой() ' по мотивам макроса ZVI_Timer
    ЗадержкаВСекундах = 0.3    ' в секундах
    НазваниеМакроса$ = "test"    ' этот макрос будет запущен через 0.3 сек.
    ЗадержкаВЧасах$ = Replace(Format(CDbl(TimeSerial(0, 0, 1)) * ЗадержкаВСекундах, "0.000000000"), ",", ".")
    macro = "ON.TIME(NOW()+" & ЗадержкаВЧасах$ & ", """ & НазваниеМакроса$ & """)" ' формируем команду запуска
    ExecuteExcel4Macro macro ' macro = ON.TIME(NOW()+0.000003472, "test")
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 10.05.2011, 21:28   #15
clever77
Пользователь
 
Регистрация: 13.04.2011
Сообщений: 58
По умолчанию

Путем проб и ошибок решил задачку
Одним Sleep ее решить не получилось, т.к Excel замирает на время задержки и не реагирует на внешние запросы....
Пришлось организовать цикл в связке:
DoEvents
Sleep

Если после запуска макроса Excel не трогать все работает.... В остальном тестирую.
clever77 вне форума Ответить с цитированием
Старый 16.03.2016, 11:36   #16
Vegas_Real
Новичок
Джуниор
 
Регистрация: 16.03.2016
Сообщений: 2
По умолчанию Внесу свои пять копеек

В 64-битных системах и соответственно в версиях приложений для этих систем (написано 64-битная версия)
Данную функцию надо объявить так:
Private Declare PtrSafe Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

В противном случае Excel выдает ошибку

Последний раз редактировалось Vegas_Real; 16.03.2016 в 11:41.
Vegas_Real вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать цикл cargo29 Мультимедиа в Delphi 1 22.04.2011 13:24
Как сделать, чтобы открытый запрос автоматически закрылся через 10 сек Vikylik Microsoft Office Access 2 20.11.2010 19:15
Как округлить милисекунды в кол-во сек и мили сек? XerSon Общие вопросы Delphi 2 09.06.2010 10:26
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Нужно сделать изменение цвета надписи каждые 15 сек Wildice Microsoft Office Excel 3 03.11.2009 12:20