Помогите с написанием макроса закрытия книги Excel!

Программирование на Visual Basic for Applications
MiGan
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 02.05.2005 (Пн) 13:27

Помогите с написанием макроса закрытия книги Excel!

Сообщение MiGan » 11.10.2005 (Вт) 14:48

Добрый день всем! Написал макрос, который закрывает рабочую книгу ("Куръер.xls") по истечении одной минуты с момента последних изменений в ячейке. Для этого использовал API таймеры (SetTimer и KillTimer). Поцедура TimerProc выполняет закрытие моей рабочей книги:
Код: Выделить всё
Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    Workbooks.Item("Куръер".xls").Close True
End Sub


Все работали замецаттельно, пока мне не доложили, что если в момент выполнения TimerProc открыты и другие рабочие книги, то и они благополучно закрываются, причем не сохраняя изменения, сделанные в них. Проверил. И точно, если, допустим, открыто 2 рабочие книги, одна из которых "Куръер.xls", то при выполнении процедуры TimerProc вторая книга вместе с экселем исчезают "по-англицки"....
Подскажите, в чем может быть ошибка???

MiGan
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 02.05.2005 (Пн) 13:27

Сообщение MiGan » 11.10.2005 (Вт) 19:14

Ауу!!! Товарисчи!!! Неужели никто не знает, как помочь???

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 11.10.2005 (Вт) 19:24

Может, подойдет?

Private Start

Private Sub Worksheet_Change(ByVal Target As Range)
Start = Timer

Do While Timer < Start + 60
DoEvents
Loop
'ThisWorkbook.Saved = True если закрываем без сохранения
' или ThisWorkbook.Save если закрываем с сохранением
ThisWorkbook.Close
End
End Sub

Где-то посередине можно вставить еще условие, когда ми хотим отключить самозакрытие.

sdm
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 28.03.2007 (Ср) 22:58

Сообщение sdm » 28.03.2007 (Ср) 23:04

Абсолютно аналогичный вопрос.
При срабатывании таймера закрываются все открытые окна excel'я.
Код: Выделить всё

Private Declare Function SetTimer Lib "user32" _
            (ByVal hwnd As Long, _
            ByVal nIDEvent As Long, _
            ByVal uElapse As Long, _
            ByVal lpTimerFunc As Long) As Long

Private Declare Function KillTimer Lib "user32" _
            (ByVal hwnd As Long, _
            ByVal nIDEvent As Long) As Long

Private Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
Range("A1").FormulaR1C1 = Range("A1").FormulaR1C1 - 1
If Range("A1").FormulaR1C1 = 0 Then
    Call KillTimer(0, lngID)
    Workbooks("Книга1.xls").Close SaveChanges:=True
End If
End Sub

Подскажите, в чём ошибка.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

    TopList