Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Application.OnTime / 15 сообщений из 15, страница 1 из 1
27.08.2010, 10:38
    #36814831
Ruslan B.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Подскажите как правильно использовать Application.OnTime в проекте VB6.
Для примера в новом проекте есть форма с одной кнопкой и кодом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Command1_Click()
Application.OnTime Now + TimeValue("00:00:05"), "MySub"
End Sub

Private Sub MySub()
MsgBox "Ок"
End Sub

при нажатии на кнопку через 5 секунд появляется ошибка:

P.S. Библиотека Excel подключена.
...
Рейтинг: 0 / 0
27.08.2010, 10:51
    #36814873
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Ruslan B.,


Попытался вышеуказанный код впихнуть в VB 5.0 (т.к. VB 6.0 у меня нет), так ему строчка Application.OnTime вообще не понравилась, наверно надо библиотеку подключать какую-то.

Потом увидел что на вашем скрине окошко у Excel.

Нарисовал я в Excel 2003 форму с кнопкой и вышеуказанный код прикрепил, там всё работает, через 5 секунд после нажатия кнопки выходит сообщение "Ok".
...
Рейтинг: 0 / 0
27.08.2010, 10:52
    #36814875
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Ruslan B.,

В VB6 нет объекта Application.

А если уж вы подключили референс на эксель, то надо загружать эксель, да и макрос должен быть тогда в экселе.
...
Рейтинг: 0 / 0
27.08.2010, 11:14
    #36814958
Ruslan B.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Shocker.ProRuslan B.,

В VB6 нет объекта Application.

А если уж вы подключили референс на эксель, то надо загружать эксель, да и макрос должен быть тогда в экселе.
Да, но время то он отсчитывает как положено, а вот нужную функцию запустить не хочет.
Значит без загрузки Excel не получится?
...
Рейтинг: 0 / 0
27.08.2010, 11:28
    #36815009
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Ruslan B.,
"MySub" должен быть в Экселе.
...
Рейтинг: 0 / 0
27.08.2010, 11:32
    #36815022
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Ruslan B.Значит без загрузки Excel не получится?
Первое обращение к Application неявно запускает Эксель.
Это вы можете скорее всего почувствовать по торможению.
Обратите также внимание на заголовок сообщения об ошибке.
...
Рейтинг: 0 / 0
29.08.2010, 08:50
    #36817528
Ruslan B.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Hugo121Ruslan B.,
"MySub" должен быть в Экселе.
Сделал связку с Excel:
Код: plaintext
1.
2.
3.
4.
5.
Set objExcel = CreateObject("Excel.Application")
Set wb = objExcel.Workbooks.Open(App.Path & "\файл.xlsm")
objExcel.Visible = False
objExcel.Run "MySub" 'запускаемая процедура
Set objExcel = Nothing
Но теперь не знаю как избавиться от такой ситуации:
файл.xlsm висит какое-то время в памяти (невидимый) и ждет срабатывания On.Time (в процедуре MySub).
Так вот если в это время вручную открыть любой другой файл Excel, то окошко файл.xlsm становится видимым
и его можно закрыть вручную, пока он еще не закончил свою работу.
...
Рейтинг: 0 / 0
29.08.2010, 09:30
    #36817534
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Ruslan B.,

Книгу можно скрыть
...
Рейтинг: 0 / 0
29.08.2010, 09:37
    #36817538
Ruslan B.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Shocker.ProRuslan B.,

Книгу можно скрыть
А как? Если
Код: plaintext
Visible = False
не помогает.
...
Рейтинг: 0 / 0
29.08.2010, 09:38
    #36817539
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Ruslan B.,

Visible для какого объекта?
...
Рейтинг: 0 / 0
29.08.2010, 09:46
    #36817544
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Вы имеете ввиду код выше? так вы скрываете эксель, а не книгу.

Точнее даже так - скрывается не книга, а окно (то есть .Visible=False надо применить к объекту типа Window)
Например
Код: plaintext
ActiveWindow.Visible = False
Но работать с ActiveWindow на мой взгляд не совсем кошерно, так что лучше через коллекцию Windows вашего объекта wb
...
Рейтинг: 0 / 0
29.08.2010, 10:20
    #36817553
Ruslan B.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Shocker.ProВы имеете ввиду код выше?
Да
Shocker.Pro
Например
Код: plaintext
ActiveWindow.Visible = False

В этом случае при открытии и последующем закрытие (вручную) другого файла xls остается видимым окно Excel (правда самого файла "файл.xlsm" не видно, но при закрытии окна Excel "файл.xlsm" закрывается.
Shocker.Proчерез коллекцию Windows вашего объекта wb
Об этом можно поподробнее пожалуйста.
...
Рейтинг: 0 / 0
29.08.2010, 11:42
    #36817591
Ruslan B.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
При открытии файла xls из VB6 и вручную (разные файлы) - они открываются в одном процессе excel.exe
(в диспетчере задач). Можно ли сделать так, чтобы эти процессы открывались независимо друг от друга?
...
Рейтинг: 0 / 0
29.08.2010, 13:58
    #36817675
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Ruslan B.Shocker.Proчерез коллекцию Windows вашего объекта wb
Об этом можно поподробнее пожалуйста.
А что тут подробнее?
Так как, открыв свою книгу, вы вряд ли плодите окна, то в wb.Windows единственный член, его и делайте Visible=False.
Но вас это не устраивает, так как остается окно экселя при закрытии файла.

Можете попытаться следить за событиями вашего экселя из VB. При закрытии пользователем последнего документа кроме вашего, делать окно экселя невидимым.

Ruslan B.При открытии файла xls из VB6 и вручную (разные файлы) - они открываются в одном процессе excel.exe
(в диспетчере задач). Можно ли сделать так, чтобы эти процессы открывались независимо друг от друга?

Ну создайте два процесса excel.exe, поэкспериментируйте, в каком из них будут открываться файлы по инициативе пользователя.

Только все это ради OnTime в VB6? Может все-таки проще пересмотреть алгоритм?
...
Рейтинг: 0 / 0
29.08.2010, 20:07
    #36817892
Ruslan B.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application.OnTime
Shocker.ProМожет все-таки проще пересмотреть алгоритм?
Да похоже это будет проще. Спасибо за ответы.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Application.OnTime / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]