Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как удалить из памяти Public переменные и массивы - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Как удалить из памяти Public переменные и массивы
kapacik Дата: Вторник, 08.04.2014, 17:55 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 40% ±

Excel 2013
Доброго времени суток. Проблема в следующем. У меня имеется порядка 70 типовых файлов с поддержкой макросов. Часть из этих макросов запускается при запуске файла, часть при активации определенных листов и т.д. Так вот при открытии нескольких таких файлов Excel вылетает. Я выяснил что если удалить процедуры запускающиеся при открытии книги то Excel позволяет открыть несколько файлов, но если совершать в этих файлах действия (например активировать одни и те-же листы, т.е. запускать одни и те-же макросы), то Excel снова вылетает. Я понимаю суть проблемы, но как ее решить не знаю. Гуглил весь день, ничего. Файл приложить не получается, т.к. он больше допустимого размера. Заранее благодарен за помощь и советы.


бухгалтер-программист самоучка
 
Ответить
СообщениеДоброго времени суток. Проблема в следующем. У меня имеется порядка 70 типовых файлов с поддержкой макросов. Часть из этих макросов запускается при запуске файла, часть при активации определенных листов и т.д. Так вот при открытии нескольких таких файлов Excel вылетает. Я выяснил что если удалить процедуры запускающиеся при открытии книги то Excel позволяет открыть несколько файлов, но если совершать в этих файлах действия (например активировать одни и те-же листы, т.е. запускать одни и те-же макросы), то Excel снова вылетает. Я понимаю суть проблемы, но как ее решить не знаю. Гуглил весь день, ничего. Файл приложить не получается, т.к. он больше допустимого размера. Заранее благодарен за помощь и советы.

Автор - kapacik
Дата добавления - 08.04.2014 в 17:55
Hugo Дата: Вторник, 08.04.2014, 18:55 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Думаю те макросы написаны криво.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеДумаю те макросы написаны криво.

Автор - Hugo
Дата добавления - 08.04.2014 в 18:55
Alex_ST Дата: Среда, 09.04.2014, 09:15 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Не видя Ваших макросов что-нибудь сказать трудно.
Но скорее всего это происходит из-за зацикливания процедур обработчиков событий.
Отключайте обработку событий в начальных строках процедур обработки и включайте на выходе. Тогда пока процедура работает, никто её не прервёт и не зациклит.
Так что Hugo наверняка прав:
Думаю те макросы написаны криво



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНе видя Ваших макросов что-нибудь сказать трудно.
Но скорее всего это происходит из-за зацикливания процедур обработчиков событий.
Отключайте обработку событий в начальных строках процедур обработки и включайте на выходе. Тогда пока процедура работает, никто её не прервёт и не зациклит.
Так что Hugo наверняка прав:
Думаю те макросы написаны криво

Автор - Alex_ST
Дата добавления - 09.04.2014 в 09:15
Мурад Дата: Среда, 09.04.2014, 11:23 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Я, как чайник, попробовал бы для начала отключить в настройках Excel автоматический запуск макросов. Затем заходил бы в каждый код и удалил бы то, что имеет вредный эффект.
 
Ответить
СообщениеЯ, как чайник, попробовал бы для начала отключить в настройках Excel автоматический запуск макросов. Затем заходил бы в каждый код и удалил бы то, что имеет вредный эффект.

Автор - Мурад
Дата добавления - 09.04.2014 в 11:23
kapacik Дата: Четверг, 10.04.2014, 16:50 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 40% ±

Excel 2013
Уважаемые Hugo и Alex ST может макросы написаны и криво, не спорю. Скажите есть возможность отправить вам свой файл на почту или аську. Просто мне не с кем посоветоваться. А из вашего сообщения не совсем ясно, что мне нужно делать. Заранее спасибо.


бухгалтер-программист самоучка
 
Ответить
СообщениеУважаемые Hugo и Alex ST может макросы написаны и криво, не спорю. Скажите есть возможность отправить вам свой файл на почту или аську. Просто мне не с кем посоветоваться. А из вашего сообщения не совсем ясно, что мне нужно делать. Заранее спасибо.

Автор - kapacik
Дата добавления - 10.04.2014 в 16:50
kapacik Дата: Четверг, 10.04.2014, 16:55 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 40% ±

Excel 2013
Отключайте обработку событий в начальных строках процедур обработки и включайте на выходе. Тогда пока процедура работает, никто её не прервёт и не зациклит.


подскажите, как это сделать плиз)


бухгалтер-программист самоучка
 
Ответить
Сообщение
Отключайте обработку событий в начальных строках процедур обработки и включайте на выходе. Тогда пока процедура работает, никто её не прервёт и не зациклит.


подскажите, как это сделать плиз)

Автор - kapacik
Дата добавления - 10.04.2014 в 16:55
RAN Дата: Четверг, 10.04.2014, 18:55 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
У меня имеется порядка 70 типовых файлов с поддержкой макросов.

А один показать жалко


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
У меня имеется порядка 70 типовых файлов с поддержкой макросов.

А один показать жалко

Автор - RAN
Дата добавления - 10.04.2014 в 18:55
Alex_ST Дата: Четверг, 10.04.2014, 21:52 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Я, бывает, не парюсь и для ускорения и предотвращения зацикливания обработчиков событий вставляю в начале процедур заготовку, отключающую ВСЁ (ну, почти :) ) :
[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]



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Четверг, 10.04.2014, 22:09
 
Ответить
СообщениеЯ, бывает, не парюсь и для ускорения и предотвращения зацикливания обработчиков событий вставляю в начале процедур заготовку, отключающую ВСЁ (ну, почти :) ) :
[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
Дата добавления - 10.04.2014 в 21:52
RAN Дата: Четверг, 10.04.2014, 21:57 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Леш, Calculation не попутал?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЛеш, Calculation не попутал?

Автор - RAN
Дата добавления - 10.04.2014 в 21:57
Alex_ST Дата: Четверг, 10.04.2014, 22:04 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Во, блин!
Спасибо, Андрей!
Дома давно не пишу ничего серьёзного и здесь болванку не подправил.
На работе-то, сейчас вспомнил, исправлял когда-то, а дома забыл... :)
Ща подправлю и в посте и в Punto Switcer'е.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Четверг, 10.04.2014, 22:09
 
Ответить
СообщениеВо, блин!
Спасибо, Андрей!
Дома давно не пишу ничего серьёзного и здесь болванку не подправил.
На работе-то, сейчас вспомнил, исправлял когда-то, а дома забыл... :)
Ща подправлю и в посте и в Punto Switcer'е.

Автор - Alex_ST
Дата добавления - 10.04.2014 в 22:04
kapacik Дата: Пятница, 11.04.2014, 09:46 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 40% ±

Excel 2013
Цитата kapacik, 08.04.2014 в 17:55, в сообщении № 1
У меня имеется порядка 70 типовых файлов с поддержкой макросов.

А один показать жалко


Не влезает он у меня сюда. Дайте кто-нить почту или аську..так я скину)


бухгалтер-программист самоучка
 
Ответить
Сообщение
Цитата kapacik, 08.04.2014 в 17:55, в сообщении № 1
У меня имеется порядка 70 типовых файлов с поддержкой макросов.

А один показать жалко


Не влезает он у меня сюда. Дайте кто-нить почту или аську..так я скину)

Автор - kapacik
Дата добавления - 11.04.2014 в 09:46
kapacik Дата: Пятница, 11.04.2014, 10:06 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 40% ±

Excel 2013
Приведу цепь кодов запуск которых приводит к ошибке (IMHO). Может так будет понятнее моя проблема

[vba]
Код
Private Sub Workbook_Open()
Call massiv_strok_Adj
Call massiv_StrokiProvodok
Call Period
End Sub

вызываемые при открытии процедуры находятся в других модулях, все нужные переменные публичные

Sub massiv_StrokiProvodok()
Dim iRow As Integer

iRow = 0
For i = 1 To 2709
If Sheets("FS_13").Cells(i, 60).Value = "1-разноска" Then
iRow = iRow + 1
StrokiProvodok(iRow) = i
End If
Next i

End Sub

Sub massiv_strok_Adj()
Dim Itogo As Integer

Itogo = 0
For i = 1 To 1000
Select Case Sheets("Adj_13").Cells(i, 17).Value
Case "Итого"
Itogo = Itogo + 1
RowAdj(Itogo) = i

Case "finish"
RowAdj(47) = i
End Select
Next i

End Sub

Sub Period()
iPeriod = Left(Right(ActiveSheet.Parent.Name, 12), 2)
End Sub
[/vba]


бухгалтер-программист самоучка

Сообщение отредактировал Serge_007 - Суббота, 12.04.2014, 05:10
 
Ответить
СообщениеПриведу цепь кодов запуск которых приводит к ошибке (IMHO). Может так будет понятнее моя проблема

[vba]
Код
Private Sub Workbook_Open()
Call massiv_strok_Adj
Call massiv_StrokiProvodok
Call Period
End Sub

вызываемые при открытии процедуры находятся в других модулях, все нужные переменные публичные

Sub massiv_StrokiProvodok()
Dim iRow As Integer

iRow = 0
For i = 1 To 2709
If Sheets("FS_13").Cells(i, 60).Value = "1-разноска" Then
iRow = iRow + 1
StrokiProvodok(iRow) = i
End If
Next i

End Sub

Sub massiv_strok_Adj()
Dim Itogo As Integer

Itogo = 0
For i = 1 To 1000
Select Case Sheets("Adj_13").Cells(i, 17).Value
Case "Итого"
Itogo = Itogo + 1
RowAdj(Itogo) = i

Case "finish"
RowAdj(47) = i
End Select
Next i

End Sub

Sub Period()
iPeriod = Left(Right(ActiveSheet.Parent.Name, 12), 2)
End Sub
[/vba]

Автор - kapacik
Дата добавления - 11.04.2014 в 10:06
kapacik Дата: Пятница, 11.04.2014, 10:07 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 40% ±

Excel 2013
Если запущен один файл все работает на ура... при запуске второго иногда третьего программа вылетает.


бухгалтер-программист самоучка
 
Ответить
СообщениеЕсли запущен один файл все работает на ура... при запуске второго иногда третьего программа вылетает.

Автор - kapacik
Дата добавления - 11.04.2014 в 10:07
Alex_ST Дата: Пятница, 11.04.2014, 10:50 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Dim iRow As Integer
число строк на листе много больше, чем 32767, поэтому лучше сделать long , хотя из-за этого Excel крэшиться не должен. Возможен только вылет в отладчик с выводом соответствующего сообщения, по которому и по строке кода, на которой программа остановилась,можно было бы определить причину.
Почему у Вас падает приложение, да ещё и не регулярно, а на разном числе открытых файлов, понять по приведённым кодам нельзя.
Вполне может быть, что дело не в Ваших файлах, а в каких-то загружающихся при старте Excel надстройках.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Dim iRow As Integer
число строк на листе много больше, чем 32767, поэтому лучше сделать long , хотя из-за этого Excel крэшиться не должен. Возможен только вылет в отладчик с выводом соответствующего сообщения, по которому и по строке кода, на которой программа остановилась,можно было бы определить причину.
Почему у Вас падает приложение, да ещё и не регулярно, а на разном числе открытых файлов, понять по приведённым кодам нельзя.
Вполне может быть, что дело не в Ваших файлах, а в каких-то загружающихся при старте Excel надстройках.

Автор - Alex_ST
Дата добавления - 11.04.2014 в 10:50
kapacik Дата: Пятница, 11.04.2014, 11:43 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 40% ±

Excel 2013
дело однозначно не в типах переменных. т.к. их значение никогда не превысит порога в 32 767

По поводу предложения 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

По поводу предложения 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

Автор - kapacik
Дата добавления - 11.04.2014 в 11:43
kapacik Дата: Пятница, 11.04.2014, 11:47 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 40% ±

Excel 2013
уважаемый Alex_ST, может вы готовы за вознаграждение более детально оценить мой файл...либо можете посоветовать где можно получить такого рода услугу...т.к. здесь я уперся в стену (файл загрузить не могу, а отдельные коды не дают общей картины).


бухгалтер-программист самоучка
 
Ответить
Сообщениеуважаемый Alex_ST, может вы готовы за вознаграждение более детально оценить мой файл...либо можете посоветовать где можно получить такого рода услугу...т.к. здесь я уперся в стену (файл загрузить не могу, а отдельные коды не дают общей картины).

Автор - kapacik
Дата добавления - 11.04.2014 в 11:47
RAN Дата: Пятница, 11.04.2014, 12:35 | Сообщение № 17
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
В коде вроде ничего подозрительного

Однако, у меня был случай, когда команда
[vba]
Код
ThisWorkbook.Close False
[/vba]
приводила к краху Excel, если было открыто несколько книг.

Замена на
[vba]
Код
ThisWorkbook.Saved = True
ThisWorkbook.Close
[/vba]
проблему излечила. Хотя почему так - не понятно.

Попробуйте отследить, в какой момент происходит крах.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВ коде вроде ничего подозрительного

Однако, у меня был случай, когда команда
[vba]
Код
ThisWorkbook.Close False
[/vba]
приводила к краху Excel, если было открыто несколько книг.

Замена на
[vba]
Код
ThisWorkbook.Saved = True
ThisWorkbook.Close
[/vba]
проблему излечила. Хотя почему так - не понятно.

Попробуйте отследить, в какой момент происходит крах.

Автор - RAN
Дата добавления - 11.04.2014 в 12:35
Alex_ST Дата: Пятница, 11.04.2014, 14:01 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
может вы готовы за вознаграждение более детально оценить мой файл...либо можете посоветовать где можно получить такого рода услугу

kapacik,
VBA-моё хобби в свободное время и я программированием занимаюсь только под настроение. Заказов поэтому не беру. Помогаю только когда есть возможность.
Попробуйте обратиться к уже отметившимся здесь RAN, HUGO или ещё к кому-нибудь из старожилов с высоким рейтингом.
Может быть они заинтересуются и просто так помогут.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
может вы готовы за вознаграждение более детально оценить мой файл...либо можете посоветовать где можно получить такого рода услугу

kapacik,
VBA-моё хобби в свободное время и я программированием занимаюсь только под настроение. Заказов поэтому не беру. Помогаю только когда есть возможность.
Попробуйте обратиться к уже отметившимся здесь RAN, HUGO или ещё к кому-нибудь из старожилов с высоким рейтингом.
Может быть они заинтересуются и просто так помогут.

Автор - Alex_ST
Дата добавления - 11.04.2014 в 14:01
Michael_S Дата: Пятница, 11.04.2014, 15:00 | Сообщение № 19
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
вот эти макросы
massiv_strok_Adj
massiv_StrokiProvodok
Period

в каждом файле?
 
Ответить
Сообщениевот эти макросы
massiv_strok_Adj
massiv_StrokiProvodok
Period

в каждом файле?

Автор - Michael_S
Дата добавления - 11.04.2014 в 15:00
kapacik Дата: Суббота, 12.04.2014, 08:27 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 40% ±

Excel 2013
Да все приведенные макросы в каждом файле


бухгалтер-программист самоучка
 
Ответить
СообщениеДа все приведенные макросы в каждом файле

Автор - kapacik
Дата добавления - 12.04.2014 в 08:27
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!