Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при сохранении документа, при сохранении по таймеру 
:(
    Опции темы
Superior
Дата 24.11.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



Задача - сделать так чтобы шла проверка, сохранён ли документ и если нет, то сохранять. Проверка должно быть каждые, пусть, 5 сек. Так вот, при сохранении документа вылазит ошибка Run-Time Error 50290: Method 'save' of 'workbook' failed. В чём проблема?
Код

' API-функции для работы с таймером
Declare Function SetTimer Lib "user32" _
                 (ByVal hwnd As Long, ByVal nIDEvent As Long, _
                  ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
                  
Declare Function KillTimer Lib "user32" _
                 (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

' Запустить таймер
Function StartMyTimer(ByVal TickTime) As Long
    StartMyTimer = SetTimer(0&, 0&, TickTime, AddressOf MyTimerEvent)
End Function

' Остановить таймер
Sub KillMyTimer(TimerID As Long)
    If TimerID = 0 Then Exit Sub
    Call KillTimer(0&, TimerID)
    TimerID = 0
End Sub

' Событие - реакция на таймер
Sub MyTimerEvent()
    ' Действия, выполняемые по таймеру.
    If Not ActiveWorkbook.Saved Then ActiveWorkbook.Save
End Sub

Public MyTimerID As Long

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    KillMyTimer MyTimerID
End Sub

Private Sub Workbook_Open()
        MyTimerID = StartMyTimer(5000)
End Sub

PM MAIL   Вверх
kapbepucm
Дата 24.11.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 3
Всего: 12



Запустил твой код, незначительно изменив, в отдельном модуле- проблем не было.

Добавлено через 2 минуты и 15 секунд
MS OFFICE 2000


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Superior
Дата 24.11.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



если сделать так:
Код

Private Sub Workbook_Open()    
    While True
        If Not ActiveWorkbook.Saved Then ActiveWorkbook.Save
        SleepVB (5)
    Wend
End Sub

' объявляем WinAPI функцию ожидания сообщения
Private Declare Function WaitMessage Lib "user32.dll" () As Long

Sub SleepVB(Seconds)
  ' ожидание Seconds секунд
  Dim Start
  Start = Timer   ' текущее время в секундах
  Do While Timer < Start + Seconds
    ' обеспечивает параллельное выполнение других процессов
    WaitMessage ' ждем сообщения
    DoEvents ' обрабатываем
  Loop
End Sub

то ошибок не возникает... но мне такой вариант не нравится из-за цикла.
PM MAIL   Вверх
kapbepucm
Дата 25.11.2008, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 3
Всего: 12



Может-быть попробуй Application.OnTime
Пример использования:
Код
Sub Zapusk()' процедура запуска таймера
  Application.OnTime Now + TimeValue("0:00:05"), "OnTimerProcedure"
End Sub
Public Sub OnTimerProcedure()
  MsgBox "тут что-либо делаем"
  Application.OnTime Now + TimeValue("0:00:05"), "OnTimerProcedure"
End Sub



--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Superior
Дата 25.11.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



Спасибо, так работает! Но сразу вопрос: чаще, чем в 1 сек я не смогу осуществить проверку, при использовании такого метода? т.е. в TimeValue нельзя засунуть долю секунды?
PM MAIL   Вверх
kapbepucm
Дата 25.11.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 3
Всего: 12



Вроде бы возможно, у меня так получилось:
Код
Sub Zapusk()
  Application.OnTime Now + TimeValue("0:00:05"), "OnTimerProcedure"
End Sub
Public Sub OnTimerProcedure()
  MsgBox "Hello"
  Application.OnTime Now + TimeValue("0:00:01") / 10, "OnTimerProcedure"
End Sub
Запускается через десятую долю секунды. Только по сравнению с WinAPI таимером, процедура не запустится заново, пока предыдущая не закончится.


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Superior
Дата 25.11.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



у меня почему-то Excel подвешиваетя основательно, если меньше секунды интервал задать  smile даже если в процедуре OnTimer ничего не делается, кроме как задаётся следующий интервал срабатывания.

Это сообщение отредактировал(а) Superior - 25.11.2008, 17:20
PM MAIL   Вверх
kapbepucm
Дата 25.11.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 3
Всего: 12



Вы заставляете Excel несколько раз в секунду что-то делать в псевдо-фоновом режиме. Как следствие этого, это вполне реальный результат.

Добавлено через 31 секунду
 smile 


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
mihanik
Дата 28.11.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Superior, а зачем так часто сохранять документ?



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0915 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.