'для справочника
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
Также есть с десяток элементов управления (в основном - кнопки).
Макросы довольно часто вызывают переключение (активацию) листов,
причем некоторые вызовы макросов идут неявно - по инициативе различных событий, в том числе в некоторых элементах управления.
Прога может работать некоторое время, а может вырубиться и почти сразу. При этом идет сообщение либо о нехватке ресурсов, либо о том что приложение будет закрыто аварийно. В первом случае, ничего непомогает, кроме снятия Excel. В папке \Doc...\Local...\Temp создается куча файлов с расширением .tmp, .emf и пр. Чистка папки не помогает.
В отладочном пошаговом режиме каждый макрос отрабатывает до конца вполне корректно.
ЧТО БЫ ЭТО ЗНАЧИЛО?
Вы хотите обсудить конкретный пример кода или так, пофлеймить?
Что касается кода, то надо готовить пример таблицы с данными досточного объема (сотни четыре строк) чтобы создать некую реальность загрузки памяти, ибо настоящие данные носят строго конфиденциальный характер, а пустую таблицу посылать бессмысленно, документации не писалось...
Допустим в книге только 2 листа: один играет роль справочника, другой роль документа. В документ вводятся реквизиты. Часть из них при вводе проверяется по справочнику на допустимость. Для этого к соответствующим ячейкам "прилинкован" соответствующий TextBox, процедура обработки которого срабатывает при изменении значения в связанной с ним ячейке. Кроме ручного ввода в ячейку предусмотрено визуальное обращение к вышеназванному справочнику. Для этого рядом с ячейкой расположен CommandButton. В справочнике (лист защищен паролем от несанкционированной модификации) можно визуально найти нужный параметр и ,двойным кликом по нему, автоматически переписать в нужную ячейку документа. Не забываем - при этом может сработать TextBox.
Вот 2 фрагмента кода:
Код:
Казалось бы ничего криминального. Но!
После ввода значения в ячейку из справочника, Excel автоматически пытается перейти в следующую, доступную для изменения ячейку.
А моя прога заставляет установиться именно на только что обработанной ячейке. Т.е. возникает своеобразный противоход, который и вызывает описанный ранее клинч. Убрав 2 последние строки из TextBox3_Change(), удалось добиться устойчивой работы приложения.
Поскольку аналогичные "глюки" (кто бы мог подумать?) были и в других TextBox-ах, создавалось впечатление асинхронной ошибки в работе всего приложения.