Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема "нехватки ресурсов" Excel

411
13 февраля 2008 года
Serzh
136 / / 09.07.2003
Есть книга, напичканая двумя десятками, IMHO примитивных, макросов.
Также есть с десяток элементов управления (в основном - кнопки).
Макросы довольно часто вызывают переключение (активацию) листов,
причем некоторые вызовы макросов идут неявно - по инициативе различных событий, в том числе в некоторых элементах управления.

Прога может работать некоторое время, а может вырубиться и почти сразу. При этом идет сообщение либо о нехватке ресурсов, либо о том что приложение будет закрыто аварийно. В первом случае, ничего непомогает, кроме снятия Excel. В папке \Doc...\Local...\Temp создается куча файлов с расширением .tmp, .emf и пр. Чистка папки не помогает.
В отладочном пошаговом режиме каждый макрос отрабатывает до конца вполне корректно.

ЧТО БЫ ЭТО ЗНАЧИЛО?
251
13 февраля 2008 года
SkyMаn
1.7K / / 31.07.2007
Вы хотите обсудить конкретный пример кода или так, пофлеймить?
411
14 февраля 2008 года
Serzh
136 / / 09.07.2003
В серьезных форумах флудом не занимаюсь...
Что касается кода, то надо готовить пример таблицы с данными досточного объема (сотни четыре строк) чтобы создать некую реальность загрузки памяти, ибо настоящие данные носят строго конфиденциальный характер, а пустую таблицу посылать бессмысленно, документации не писалось...
411
18 февраля 2008 года
Serzh
136 / / 09.07.2003
Кажись решение проблемы найдено. Для форумчан опишу подробнее (в сокращенном - для соблюдения конфиденциальности - варианте).

Допустим в книге только 2 листа: один играет роль справочника, другой роль документа. В документ вводятся реквизиты. Часть из них при вводе проверяется по справочнику на допустимость. Для этого к соответствующим ячейкам "прилинкован" соответствующий TextBox, процедура обработки которого срабатывает при изменении значения в связанной с ним ячейке. Кроме ручного ввода в ячейку предусмотрено визуальное обращение к вышеназванному справочнику. Для этого рядом с ячейкой расположен CommandButton. В справочнике (лист защищен паролем от несанкционированной модификации) можно визуально найти нужный параметр и ,двойным кликом по нему, автоматически переписать в нужную ячейку документа. Не забываем - при этом может сработать TextBox.
Вот 2 фрагмента кода:
Код:
'для справочника
Private Sub Worksheet_BeforeDoubleClick(ByVal oT As Range, lC As Boolean)
Dim cR As String, nR As Integer, nC As Integer
'.......
cR = Cells(nR, nC).Value
With Worksheets(2)
     .Activate
     .Range("G12").Value = cR    ' именно в этом месте и были сбои!
End With
lC = True   ' запрет дальнейшей обработки двойного клика
End Sub

'для документа
Private Sub TextBox3_Change()
Dim oS As Worksheet, oT As Worksheet, oC As Range
Dim cP As String, cT As String, nL As Long
'......
cT = ActiveSheet.TextBox3.LinkedCell
Range(cT).Select             ' вот тут то и зарыта собака, IMHO!!!
End Sub


Казалось бы ничего криминального. Но!
После ввода значения в ячейку из справочника, Excel автоматически пытается перейти в следующую, доступную для изменения ячейку.
А моя прога заставляет установиться именно на только что обработанной ячейке. Т.е. возникает своеобразный противоход, который и вызывает описанный ранее клинч. Убрав 2 последние строки из TextBox3_Change(), удалось добиться устойчивой работы приложения.

Поскольку аналогичные "глюки" (кто бы мог подумать?) были и в других TextBox-ах, создавалось впечатление асинхронной ошибки в работе всего приложения.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог