Тема: Закрытие книги Excel по таймеру

Требуется закрытие книги excel по таймеру. Ниже приведен код, который, в принципе, данную задачу решает. Проблема в том, что закрывается не только нужный файл, а вообще все файлы, открытые в данный момент в excel, в том числе и сам excel, что недопустимо.
Подскажите, в чём ошибка.
'модуль:

Public Declare Function SetTimer Lib "user32" _
 (ByVal hWnd As Long, ByVal nIDEvent As Long, _
 ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" _
 (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Public lngID As Long
Function CB_StartTimer()
lngID = SetTimer(0, 0, 1000, AddressOf timerwork)
End Function
Function CB_StopTimer()
Call KillTimer(0, lngID)
End Function
Function timerwork()
Call CB_StopTimer
MsgBox "fff"
Workbooks("Книга1.xls").Close SaveChanges:=True
End Function

'книга:

Private Sub workbook_open()
CB_StartTimer
End Sub

Re: Закрытие книги Excel по таймеру

Как я понимаю макрос экселевский?
По идее, закрыть макросом оболочку изнутри невозможно.
Если в окошке Immediate набрать

application.workbooks("Книга1.xls").Close SaveChanges:=true

, закрытие происходит нормально. То есть закрывается только указанная книга.
Следовательно, закрытие приложения у вас происходит скорее всего из-за внутренней ошибки в приложении.
Разбираться с приведенным кодом, к сож. пока нет времени, попробуйте организовать таймер через метод wait

Re: Закрытие книги Excel по таймеру

Сидор Лютый пишет:

Следовательно, закрытие приложения у вас происходит скорее всего из-за внутренней ошибки в приложении.

Тоже так думаю. По отдельности таймер и закрытие конкретной книги срабатывают нормально, но в сочетании - ошибка.
Wait в VBA?

Re: Закрытие книги Excel по таймеру

sdm пишет:

Wait в VBA?

А что смущает?

Re: Закрытие книги Excel по таймеру

> Сидор Лютый
попробовал wait, и sleep, и wait+sleep - не помогает. Закрывается весь excel. :(

Re: Закрытие книги Excel по таймеру

попробовал wait, и sleep, и wait+sleep — не помогает. Закрывается весь excel

Жуть!:)
Может у Вас, при закрытии, еще какие-то фоновые процессы выполняются? А Вы тут пытаетесь документ закрыть.. Вот оно и падает.
Больше догадок нету..

Re: Закрытие книги Excel по таймеру

> sdm
http://www.vb.kiev.ua/ref/w32api/showdoc.php?f=settimer

Re: Закрытие книги Excel по таймеру

> Сидор Лютый
видимо, excel глючит :(

не вышло и так.
Какой-то падший excel.

Re: Закрытие книги Excel по таймеру

Описание : Функция SetTimer создает системный таймер, который вызывает посылку сообщений WM_TIMER указанному окну, через указанный интервал времени.

Declare Function SetTimer Lib "user32" _
            (ByVal [b]hwnd[/b] As Long, _
            ByVal nIDEvent As Long, _
            ByVal uElapse As Long, _
            ByVal lpTimerFunc As Long) As Long

Выделено мной. Почему hwnd=0? Может быть надо подставить хэндл окна Excel?

Re: Закрытие книги Excel по таймеру

> brigval
Попробовал так:

Function CB_StartTimer()
lngID = SetTimer(Application.hWnd, 0, 1000, AddressOf timerwork)
End Function
Function CB_StopTimer()
Call KillTimer(Application.hWnd, lngID)
End Function

Результат тотже.
Смущает то, что по отдельности таймер (даже с нулевым hwnd) и закрытие книги срабатывают нормально. В совокупности - excel падает, причем, вносимые в книгу изменения корректно сохраняются :)
Что-то МелкоСофт намудрил.