Доброго времени суток. Проблема в следующем. У меня имеется порядка 70 типовых файлов с поддержкой макросов. Часть из этих макросов запускается при запуске файла, часть при активации определенных листов и т.д. Так вот при открытии нескольких таких файлов Excel вылетает. Я выяснил что если удалить процедуры запускающиеся при открытии книги то Excel позволяет открыть несколько файлов, но если совершать в этих файлах действия (например активировать одни и те-же листы, т.е. запускать одни и те-же макросы), то Excel снова вылетает. Я понимаю суть проблемы, но как ее решить не знаю. Гуглил весь день, ничего. Файл приложить не получается, т.к. он больше допустимого размера. Заранее благодарен за помощь и советы.
Доброго времени суток. Проблема в следующем. У меня имеется порядка 70 типовых файлов с поддержкой макросов. Часть из этих макросов запускается при запуске файла, часть при активации определенных листов и т.д. Так вот при открытии нескольких таких файлов Excel вылетает. Я выяснил что если удалить процедуры запускающиеся при открытии книги то Excel позволяет открыть несколько файлов, но если совершать в этих файлах действия (например активировать одни и те-же листы, т.е. запускать одни и те-же макросы), то Excel снова вылетает. Я понимаю суть проблемы, но как ее решить не знаю. Гуглил весь день, ничего. Файл приложить не получается, т.к. он больше допустимого размера. Заранее благодарен за помощь и советы.kapacik
Не видя Ваших макросов что-нибудь сказать трудно. Но скорее всего это происходит из-за зацикливания процедур обработчиков событий. Отключайте обработку событий в начальных строках процедур обработки и включайте на выходе. Тогда пока процедура работает, никто её не прервёт и не зациклит. Так что Hugo наверняка прав:
Не видя Ваших макросов что-нибудь сказать трудно. Но скорее всего это происходит из-за зацикливания процедур обработчиков событий. Отключайте обработку событий в начальных строках процедур обработки и включайте на выходе. Тогда пока процедура работает, никто её не прервёт и не зациклит. Так что Hugo наверняка прав:
Я, как чайник, попробовал бы для начала отключить в настройках Excel автоматический запуск макросов. Затем заходил бы в каждый код и удалил бы то, что имеет вредный эффект.
Я, как чайник, попробовал бы для начала отключить в настройках Excel автоматический запуск макросов. Затем заходил бы в каждый код и удалил бы то, что имеет вредный эффект.Мурад
Уважаемые Hugo и Alex ST может макросы написаны и криво, не спорю. Скажите есть возможность отправить вам свой файл на почту или аську. Просто мне не с кем посоветоваться. А из вашего сообщения не совсем ясно, что мне нужно делать. Заранее спасибо.
Уважаемые Hugo и Alex ST может макросы написаны и криво, не спорю. Скажите есть возможность отправить вам свой файл на почту или аську. Просто мне не с кем посоветоваться. А из вашего сообщения не совсем ясно, что мне нужно делать. Заранее спасибо.kapacik
Отключайте обработку событий в начальных строках процедур обработки и включайте на выходе. Тогда пока процедура работает, никто её не прервёт и не зациклит.
Отключайте обработку событий в начальных строках процедур обработки и включайте на выходе. Тогда пока процедура работает, никто её не прервёт и не зациклит.
Я, бывает, не парюсь и для ускорения и предотвращения зацикливания обработчиков событий вставляю в начале процедур заготовку, отключающую ВСЁ (ну, почти ) : [vba]
Код
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: .Calculation = xlManual: End With
[/vba] А в конце - включающую всё: [vba]
Код
With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: .Calculation = xlAutomatic: End With
[/vba] Но, конечно, нужно быть аккуратным чтобы не попасть на "левый выход" по Exit Sub, из-за которого отключенное не включится.
[offtop]А разные "болванки" (у меня их для VBA с десяток) я, к стати, вставляю Punto Switcer'ом Например, выше указанная "отключалка" вводится после набора app-false , "включалка" - после набора app-true , MsgBox - mbx, Debug.Print - deb-pr и т.д. Очень удобно![/offtop]
Я, бывает, не парюсь и для ускорения и предотвращения зацикливания обработчиков событий вставляю в начале процедур заготовку, отключающую ВСЁ (ну, почти ) : [vba]
Код
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: .Calculation = xlManual: End With
[/vba] А в конце - включающую всё: [vba]
Код
With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: .Calculation = xlAutomatic: End With
[/vba] Но, конечно, нужно быть аккуратным чтобы не попасть на "левый выход" по Exit Sub, из-за которого отключенное не включится.
[offtop]А разные "болванки" (у меня их для VBA с десяток) я, к стати, вставляю Punto Switcer'ом Например, выше указанная "отключалка" вводится после набора app-false , "включалка" - после набора app-true , MsgBox - mbx, Debug.Print - deb-pr и т.д. Очень удобно![/offtop]Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Четверг, 10.04.2014, 22:09
Во, блин! Спасибо, Андрей! Дома давно не пишу ничего серьёзного и здесь болванку не подправил. На работе-то, сейчас вспомнил, исправлял когда-то, а дома забыл... Ща подправлю и в посте и в Punto Switcer'е.
Во, блин! Спасибо, Андрей! Дома давно не пишу ничего серьёзного и здесь болванку не подправил. На работе-то, сейчас вспомнил, исправлял когда-то, а дома забыл... Ща подправлю и в посте и в Punto Switcer'е.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Четверг, 10.04.2014, 22:09
число строк на листе много больше, чем 32767, поэтому лучше сделать long , хотя из-за этого Excel крэшиться не должен. Возможен только вылет в отладчик с выводом соответствующего сообщения, по которому и по строке кода, на которой программа остановилась,можно было бы определить причину. Почему у Вас падает приложение, да ещё и не регулярно, а на разном числе открытых файлов, понять по приведённым кодам нельзя. Вполне может быть, что дело не в Ваших файлах, а в каких-то загружающихся при старте Excel надстройках.
число строк на листе много больше, чем 32767, поэтому лучше сделать long , хотя из-за этого Excel крэшиться не должен. Возможен только вылет в отладчик с выводом соответствующего сообщения, по которому и по строке кода, на которой программа остановилась,можно было бы определить причину. Почему у Вас падает приложение, да ещё и не регулярно, а на разном числе открытых файлов, понять по приведённым кодам нельзя. Вполне может быть, что дело не в Ваших файлах, а в каких-то загружающихся при старте Excel надстройках.Alex_ST
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: .Calculation = xlManual: End With
А в конце - включающую всё: With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: .Calculation = xlAutomatic: End With
после доработки кода события WorkBook_Open
программа выдала ошибку на выполнении процедуры iPeriod
дело однозначно не в типах переменных. т.к. их значение никогда не превысит порога в 32 767
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: .Calculation = xlManual: End With
А в конце - включающую всё: With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: .Calculation = xlAutomatic: End With
после доработки кода события WorkBook_Open
программа выдала ошибку на выполнении процедуры iPeriodkapacik
уважаемый Alex_ST, может вы готовы за вознаграждение более детально оценить мой файл...либо можете посоветовать где можно получить такого рода услугу...т.к. здесь я уперся в стену (файл загрузить не могу, а отдельные коды не дают общей картины).
уважаемый Alex_ST, может вы готовы за вознаграждение более детально оценить мой файл...либо можете посоветовать где можно получить такого рода услугу...т.к. здесь я уперся в стену (файл загрузить не могу, а отдельные коды не дают общей картины).kapacik
может вы готовы за вознаграждение более детально оценить мой файл...либо можете посоветовать где можно получить такого рода услугу
kapacik, VBA-моё хобби в свободное время и я программированием занимаюсь только под настроение. Заказов поэтому не беру. Помогаю только когда есть возможность. Попробуйте обратиться к уже отметившимся здесь RAN, HUGO или ещё к кому-нибудь из старожилов с высоким рейтингом. Может быть они заинтересуются и просто так помогут.
может вы готовы за вознаграждение более детально оценить мой файл...либо можете посоветовать где можно получить такого рода услугу
kapacik, VBA-моё хобби в свободное время и я программированием занимаюсь только под настроение. Заказов поэтому не беру. Помогаю только когда есть возможность. Попробуйте обратиться к уже отметившимся здесь RAN, HUGO или ещё к кому-нибудь из старожилов с высоким рейтингом. Может быть они заинтересуются и просто так помогут.Alex_ST