Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2010, 16:33   #1
Byroad
 
Регистрация: 10.06.2010
Сообщений: 4
По умолчанию Эксель 2007: Проблема с запуском макроса по событию

Суть проблемы: есть VBA проект, который на одной машине (7-ка домашняя расширенная) работает без проблем. Но на двух других (XP и 7-ка корпоративная) то запускает ( в начале), то не запускает макрос по событию (изменение ячейки - выбор из списка - на одном листе). Запуск не происходит и после того как дублируется команда Application.ScreenUpdating = True
Настройки и параметры Excel на трех машинах - одинаковые.

Заранее спасибо за любые подсказки!
Byroad вне форума Ответить с цитированием
Старый 13.09.2010, 16:52   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Запуск не происходит и после того как дублируется команда Application.ScreenUpdating = True
Команда Application.ScreenUpdating = True не имеет никакого отношения к запуску макроса по событию.

Выкладывайте весь код - проблема в нём, и, не увидев файла с кодом, ничего конкретного посоветовать не удастся.

PS: Тут не от Windows зависит - а от производительности компа.
Из-за того, что код написан криво (нехватает одной строки типа Application.EnableEvents = False или Exit Function), в одном случае лишний кусок кода не успевает запуститься (и макрос работает "нормально"), а на быстрой ОС код срабатывает, и получается не то, что надо (или наоборот)
EducatedFool вне форума Ответить с цитированием
Старый 13.09.2010, 20:10   #3
Byroad
 
Регистрация: 10.06.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Команда Application.ScreenUpdating = True не имеет никакого отношения к запуску макроса по событию.

Выкладывайте весь код - проблема в нём, и, не увидев файла с кодом, ничего конкретного посоветовать не удастся.

PS: Тут не от Windows зависит - а от производительности компа.
Из-за того, что код написан криво (нехватает одной строки типа Application.EnableEvents = False или Exit Function), в одном случае лишний кусок кода не успевает запуститься (и макрос работает "нормально"), а на быстрой ОС код срабатывает, и получается не то, что надо (или наоборот)
С командой ошибся, должно было быть Application.EnableEvents = True

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

К сожалению, проект содержит много макросов и листов... Однако замечено, что запуск макроса по событию прекращается после использования кнопки переключателя - когда он в положении "Сохранить", вот его код:


Private Sub ToggleButton2_Click()
ActiveSheet.Unprotect Password:="***"
Application.EnableEvents = False
If ToggleButton2.Caption = "Редактировать" Then
ToggleButton2.Caption = "Сохранить"
ToggleButton2.Font.Bold = True
Range("A3") = 1
Range("RecordNumber").Formula = "=Max(Data!A3:A9980)+1"
Range("CurDate").Formula = "=today()"
Range("CurDate").Select
Else
Range("A3") = 0
ToggleButton2.Caption = "Редактировать "
' Range("CurDate").ClearContents
Range("RecordNumber") = Range("O2")
Range("RecordNumber").Select
End If
Range("J2").Activate
Application.EnableEvents = True
ActiveSheet.Protect Password:="***", DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

А вот и сам макрос события:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("POAType")) Is Nothing Then
Application.ScreenUpdating = False
Application.EnableEvents = False
ChoseType
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End If

Спасибо за любые предположения!

Последний раз редактировалось Byroad; 13.09.2010 в 20:13.
Byroad вне форума Ответить с цитированием
Старый 13.09.2010, 21:04   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте так:

Код:
Private Sub ToggleButton2_Click()
    ActiveSheet.Unprotect Password:="***"
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    If ToggleButton2.Caption = "Редактировать" Then
        ToggleButton2.Caption = "Сохранить"
        ToggleButton2.Font.Bold = True
        Range("A3") = 1
        Range("RecordNumber").Formula = "=Max(Data!A3:A9980)+1"
        Range("CurDate").Formula = "=today()"
        Range("CurDate").Select
    Else
        Range("A3") = 0
        ToggleButton2.Caption = "Редактировать "
        ' Range("CurDate").ClearContents
        Range("RecordNumber") = Range("O2")
        Range("RecordNumber").Select
    End If
    Range("J2").Activate
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    ActiveSheet.Protect Password:="***", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("POAType")) Is Nothing Then
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        Application.EnableEvents = False
        ChoseType
        Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
        Application.EnableEvents = True
    End If
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 13.09.2010, 23:00   #5
Byroad
 
Регистрация: 10.06.2010
Сообщений: 4
По умолчанию

Попробовал! Увы, воз и ныне там!

Уже мозги плавятся... не могу сообразить как из-за переключателя, который меняет значения в 3-х ячейках, может отключаться запуск по событию....

Может есть какой способ выловить эту ошибку?

Последний раз редактировалось Byroad; 13.09.2010 в 23:03.
Byroad вне форума Ответить с цитированием
Старый 14.09.2010, 01:15   #6
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

А если непосредственно после кода изменения ячейки которая должна порождать событие поставить DoEvents ?
Aent вне форума Ответить с цитированием
Старый 14.09.2010, 01:55   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Один раз был случай не успевал код отработать в событии листа Worksheet_Change .Выход- поставил задержку между процедурами на 100 милисекунд,и все пошло нормально
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 14.09.2010, 13:23   #8
Byroad
 
Регистрация: 10.06.2010
Сообщений: 4
По умолчанию

Спасибо EducatedFool, Aent и doober! - Ваши подсказки помогли решетить проблему! Как оказалось - дело было в очень тяжеловесной функции (дата прописью), которая использовалась в ячейке на одном из листов. На компе просто не хватало памяти...

Опишу свой метод тыка, может кому понадобится...

В Worksheet_Change поставил Msgbox "Check1" до макроса и Msgbox "Check2" после него. В Worksheet_Change отметки проходились, но макрос не исполнялся. Вне Worksheet_Change, макрос работал как пошагово, так и на автомате. В Worksheet_Change вместо вызова макроса записал его код и при помощи тех же боксов установил, что самая элементарная команда - выделить диапазон ячеек - не выполняется. Скопировал лист в отдельную книгу, сначала выдавало ошибку№7 (Out of memory) – потом, после выхода-захода в Эксель заработало. Понял, что проблема - в книге проекта. Вернулся к проекту, и начал поочередно удалять листы. Таким образом, локализировал лист и ячейку с проблемной функцией. Функцию заменил процедурой (тоже по событию ;-)), и все пошло-поехало!
Byroad вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск макроса по событию tim13 Microsoft Office Excel 5 17.08.2009 13:33
Помогите с запуском макроса bvden Microsoft Office Excel 0 13.07.2009 15:53
Эксель 2007. сводная таблица Катик7 Microsoft Office Excel 1 13.05.2009 22:38
Проблема с запуском boroda Помощь студентам 5 11.01.2009 11:52
Настраиваемая кнопка макроса в Excel 2007 ZORRO2005 Microsoft Office Excel 0 24.11.2008 00:42