|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.09.2010, 16:33 | #1 |
Регистрация: 10.06.2010
Сообщений: 4
|
Эксель 2007: Проблема с запуском макроса по событию
Суть проблемы: есть VBA проект, который на одной машине (7-ка домашняя расширенная) работает без проблем. Но на двух других (XP и 7-ка корпоративная) то запускает ( в начале), то не запускает макрос по событию (изменение ячейки - выбор из списка - на одном листе). Запуск не происходит и после того как дублируется команда Application.ScreenUpdating = True
Настройки и параметры Excel на трех машинах - одинаковые. Заранее спасибо за любые подсказки! |
13.09.2010, 16:52 | #2 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Цитата:
Выкладывайте весь код - проблема в нём, и, не увидев файла с кодом, ничего конкретного посоветовать не удастся. PS: Тут не от Windows зависит - а от производительности компа. Из-за того, что код написан криво (нехватает одной строки типа Application.EnableEvents = False или Exit Function), в одном случае лишний кусок кода не успевает запуститься (и макрос работает "нормально"), а на быстрой ОС код срабатывает, и получается не то, что надо (или наоборот) |
|
13.09.2010, 20:10 | #3 | |
Регистрация: 10.06.2010
Сообщений: 4
|
Цитата:
Спасибо за подсказку: действительно, комп, на котором все работает, - самый производительный. К сожалению, проект содержит много макросов и листов... Однако замечено, что запуск макроса по событию прекращается после использования кнопки переключателя - когда он в положении "Сохранить", вот его код: 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. |
|
13.09.2010, 21:04 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Попробуйте так:
Код:
|
13.09.2010, 23:00 | #5 |
Регистрация: 10.06.2010
Сообщений: 4
|
Попробовал! Увы, воз и ныне там!
Уже мозги плавятся... не могу сообразить как из-за переключателя, который меняет значения в 3-х ячейках, может отключаться запуск по событию.... Может есть какой способ выловить эту ошибку? Последний раз редактировалось Byroad; 13.09.2010 в 23:03. |
14.09.2010, 01:15 | #6 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
А если непосредственно после кода изменения ячейки которая должна порождать событие поставить DoEvents ?
|
14.09.2010, 01:55 | #7 |
Старожил
Регистрация: 02.05.2009
Сообщений: 3,907
|
Один раз был случай не успевал код отработать в событии листа Worksheet_Change .Выход- поставил задержку между процедурами на 100 милисекунд,и все пошло нормально
Анализ,обработка данных Недорого
|
14.09.2010, 13:23 | #8 |
Регистрация: 10.06.2010
Сообщений: 4
|
Спасибо EducatedFool, Aent и doober! - Ваши подсказки помогли решетить проблему! Как оказалось - дело было в очень тяжеловесной функции (дата прописью), которая использовалась в ячейке на одном из листов. На компе просто не хватало памяти...
Опишу свой метод тыка, может кому понадобится... В Worksheet_Change поставил Msgbox "Check1" до макроса и Msgbox "Check2" после него. В Worksheet_Change отметки проходились, но макрос не исполнялся. Вне Worksheet_Change, макрос работал как пошагово, так и на автомате. В Worksheet_Change вместо вызова макроса записал его код и при помощи тех же боксов установил, что самая элементарная команда - выделить диапазон ячеек - не выполняется. Скопировал лист в отдельную книгу, сначала выдавало ошибку№7 (Out of memory) – потом, после выхода-захода в Эксель заработало. Понял, что проблема - в книге проекта. Вернулся к проекту, и начал поочередно удалять листы. Таким образом, локализировал лист и ячейку с проблемной функцией. Функцию заменил процедурой (тоже по событию ;-)), и все пошло-поехало! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запуск макроса по событию | 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 |