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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как выполнить макрос при автосохранении книги Exce 
V
    Опции темы
VitalyP
Дата 15.12.2011, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

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



Доброго времени суток всем!

Задача такая: перед автосохранением книги Excel необходимо выполнить макрос.

Пытался решить таким образом:

Код

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 Application.Run "macros"
End Sub


При сохранении вручную - выполняет, автоматически - нет.
Видимо событие BeforeSave - к автосохранению не относится, а про "BeforeAutoSave" не могу найти.

Спасибо!

Это сообщение отредактировал(а) VitalyP - 15.12.2011, 11:36
PM MAIL   Вверх
Akina
Дата 15.12.2011, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Думаю, что поскольку AutoSave - это операция уровня Excel.Application, а не Workbook, то и обработчики событий книги тебе не помощники...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
VitalyP
Дата 15.12.2011, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

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



Я так понимаю, мне нужно событие приложения, типа "Application_AutoSave"?

Ну допустим это скорее всего лишнее. К этому я пришел от задачи: выполнять макрос каждые 15 минут (делаю запросы из БД для обновления содержимого).

Это сообщение отредактировал(а) VitalyP - 15.12.2011, 13:08
PM MAIL   Вверх
Akina
Дата 15.12.2011, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(VitalyP @  15.12.2011,  13:36 Найти цитируемый пост)
делаю запросы из БД для обновления содержимого

А для решения ЭТОЙ задачи следует использовать совершенно иные средства!!!
В меню "Данные" есть пункт "Импорт внешних данных", например...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
VitalyP
Дата 15.12.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

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



Akina, долго рассказывать, но так к сожалению не получиться... Вообщем там своеобразные запросы, и данные представлены в нестандартном виде...

Проблема в следующем: есть макрос (рабочий), сейчас запускается по нажатию кнопки. Мне надо запускать его через каждые 15 минут (например).
PM MAIL   Вверх
Akina
Дата 15.12.2011, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Используйте Application.OnTime


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
VitalyP
Дата 16.12.2011, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

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



Akina, согласен. Но, не затруднит Вас написать как будет выглядеть весь код, и где он должен распологаться?

Я просто не понимаю следующего: 

Код

Private Sub macros()
 Application.OnTime mytime, "Сделать чё-нить"
End Sub


когда должен запускаться? Т.е. он выполняется постоянно?

И кстати "Сделать чё-нить" - 
Код

Application.Run "'Поручения со структурой.xlsm'!Контрольсроков_Кнопка3_Щелчок"

Так подойдет?


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


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(VitalyP @  16.12.2011,  08:37 Найти цитируемый пост)
он выполняется постоянно?

Нет, один раз. Фактически он шедулится на однократное исполнение в заданный кол времени.

Цитата(VitalyP @  16.12.2011,  08:37 Найти цитируемый пост)
когда должен запускаться?

Первый раз - в Auto_Open, а далее его метод должен шедулить следующий запуск.

Цитата(VitalyP @  16.12.2011,  08:37 Найти цитируемый пост)
Так подойдет?

Чем спрашивать - проще попробовать.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
VitalyP
Дата 16.12.2011, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

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



Код

Private Sub Auto_Open()
 Application.OnTime "10:00:00", Application.Run "'Поручения со структурой.xlsm'!Контрольсроков_Кнопка3_Щелчок"
End Sub


Тут ругается на "'Поручения со структурой.xlsm'!Контрольсроков_Кнопка3_Щелчок", говорит Expected: End of statement при компиляции.

Хотя эту строку:
Код

Application.Run "'Поручения со структурой.xlsm'!Контрольсроков_Кнопка3_Щелчок"

мне VBA сам написал в записи макроса.



Код

Private Sub Auto_Open()
 Application.OnTime "9:11:00", "'Поручения со структурой.xlsm'!Контрольсроков_Кнопка3_Щелчок"
End Sub

Таким образом компилируется, но ничего не произошло...

Это сообщение отредактировал(а) VitalyP - 16.12.2011, 08:12
PM MAIL   Вверх
dorogoyIV
Дата 16.12.2011, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



autosave

только вот всю память съедает :(
(в диспетчере задач видно)

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  _____1.rar 10,93 Kb
PM MAIL   Вверх
VitalyP
Дата 16.12.2011, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

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



dorogoyIV, спасибо! 
Сейчас посмотрю, как это будет в моём случае.

Ну, я так понял, что 

Код

Private Sub Workbook_Open()
 Call MyMacro
End Sub

Код

Private Sub MyMacro()
 Dim currenttime, newTime
 Dim timeout
 timeout = 10 ' seconds
 currenttime = Timer 'время в секундах после нуля часов
 While True
  DoEvents
  If (currenttime + timeout <= Timer) Then
   Call Контрольсроков_Кнопка3_Щелчок
   currenttime = Timer
  End If
 Wend
End Sub


После открытия входит в бесконечный цикл. Для меня это не подойдет. Нужно чтобы выполнялись и другие макросы. Есть идея одна, сейчас попробую и отпишусь.

Это сообщение отредактировал(а) VitalyP - 16.12.2011, 11:54
PM MAIL   Вверх
VitalyP
Дата 16.12.2011, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

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



Вот чего мне не хватает теперь:

Код

While True
  DoEvents
  If (currenttime + timeout <= Timer) Then
   Call Контрольсроков_Кнопка3_Щелчок
   currenttime = Timer
  End If
 Wend


Надо сделать в цикле типа: "Делать пока не нажмут Esc".
А потом запускать по нажатию кнопки.

Насколько я понял:
Код

Do Until KeyPressed

или чего то подобного в VBA нету?
PM MAIL   Вверх
Дмит
Дата 19.12.2011, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 21.4.2006
Где: г.Волгоград

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



Код

Sub Auto_Open()
    MyMacro
End Sub
Sub MyMacro()
 Application.OnTime Now + TimeValue("00:00:15"), "MyMacro"
 'сохранение или что то ещё
 '
 '
End Sub


Макрос MyMacro будет запускаться каждые 15 сек.
Цитата

Do Until KeyPressed

Application.OnKey - посмотри и соответственно как остановить Application.OnTime всё есть в справке. smile 
PM MAIL WWW   Вверх
VitalyP
Дата 26.12.2011, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

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



Всем спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

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

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

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



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


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

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


 




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


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

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