Здравствуйте, необходимо выполнять некоторый код (х1, х2) каждый раз, когда меняются данные в ячейках с проверкой данных (тип список). Так же есть "главная" ячейка "B11". Необходимо, что бы после изменения информации в этой ячейке, все остальные ячейки с проверкой данных принимали значение "" (то есть в них для удобства восприятия информации происходил сброс с ранее заполненных данных). Написал вот такой код:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B11:B25")) Is Nothing Then
x1 'вызываемые процедуры, которые обрабатывают и меняют информацию в ячейках
x2
End If
Dim xCount As Integer
If Not Intersect(Target, Range("B11")) Is Nothing Then
xCount = 0
Do While xCount <> 15
Worksheets("Layer").Cells(12 + xCount, 2) = ""
xCount = xCount + 1
Loop
End If
End Sub
Проблема следующая - каждый раз, после срабатывания основных процедур на первую ячейку "B11", происходит очистка остальных ячеек (за каждый этап цикла по 1 разу судя по всему), что приводит к повторному запуску процедур х1 и х2, что замедляет процесс обсчета данных на порядок. Как можно это исправить?
"...Часто макросы требуют долгого времени выполнения, которое можно значительно сократить. В начале и в конце каждой ресурсоёмкой функции вызвать Prepare и Ended.
Код
Public Sub Prepare()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
End Sub
Код
Public Sub Ended()
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.DisplayStatusBar = True
Application.DisplayAlerts = True
End Sub
По порядку: 1. Отключить перерисовку объектов на экране, чтобы ничего не мигало. 2. Выключить расчет. Внимание, если макрос прервался посреди работы, то расчет так и останется в ручном режиме! 3. Не обрабатывать события. 4. Отображение границ страниц, тоже почему-то помогает. 5. В статусной строке выводятся различные данные, что замедляет работу, отключаем. 6. Это если нужно. Выключает сообщения Экселя. Например, мы делаем Workbook.Close, Эксель хочет спросить сохранить ли изменения. При выключении этого параметра все ответы будут даны автоматически (изменения не сохранятся). ..."
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/