Здравствуйте, уважаемые колдуны и шаманы!!! Имеется простенький код, который туговато работает. Подскажите пожалуйста,как сделать так, чтобы он работал пошустрее? Самому мне не осилить. Заранее спасибо!!!
[vba]
Код
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim isect As Variant Dim rn As Range Set rn = ActiveSheet.Range("D12:AH18") Set isect = Application.Intersect(rn, Target) If isect Is Nothing Then Exit Sub Else
On Error Resume Next
If ActiveCell.Offset(-1, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-1, 0) = ActiveCell Then ActiveCell.Offset(-1, 0) = "" End If End If
If ActiveCell.Offset(-2, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-2, 0) = ActiveCell Then ActiveCell.Offset(-2, 0) = "" End If End If
If ActiveCell.Offset(-3, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-3, 0) = ActiveCell Then ActiveCell.Offset(-3, 0) = "" End If End If
If ActiveCell.Offset(-4, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-4, 0) = ActiveCell Then ActiveCell.Offset(-4, 0) = "" End If End If
If ActiveCell.Offset(-5, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-5, 0) = ActiveCell Then ActiveCell.Offset(-5, 0) = "" End If End If
If ActiveCell.Offset(-6, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-6, 0) = ActiveCell Then ActiveCell.Offset(-6, 0) = "" End If End If
If ActiveCell.Offset(1, 0) = ActiveCell Then ActiveCell.Offset(1, 0) = "" End If
If ActiveCell.Offset(2, 0) = ActiveCell Then ActiveCell.Offset(2, 0) = "" End If
If ActiveCell.Offset(3, 0) = ActiveCell Then ActiveCell.Offset(3, 0) = "" End If
If ActiveCell.Offset(4, 0) = ActiveCell Then ActiveCell.Offset(4, 0) = "" End If
If ActiveCell.Offset(5, 0) = ActiveCell Then ActiveCell.Offset(5, 0) = "" End If
If ActiveCell.Offset(6, 0) = ActiveCell Then ActiveCell.Offset(6, 0) = "" End If
End If End Sub
[/vba]
Здравствуйте, уважаемые колдуны и шаманы!!! Имеется простенький код, который туговато работает. Подскажите пожалуйста,как сделать так, чтобы он работал пошустрее? Самому мне не осилить. Заранее спасибо!!!
[vba]
Код
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim isect As Variant Dim rn As Range Set rn = ActiveSheet.Range("D12:AH18") Set isect = Application.Intersect(rn, Target) If isect Is Nothing Then Exit Sub Else
On Error Resume Next
If ActiveCell.Offset(-1, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-1, 0) = ActiveCell Then ActiveCell.Offset(-1, 0) = "" End If End If
If ActiveCell.Offset(-2, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-2, 0) = ActiveCell Then ActiveCell.Offset(-2, 0) = "" End If End If
If ActiveCell.Offset(-3, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-3, 0) = ActiveCell Then ActiveCell.Offset(-3, 0) = "" End If End If
If ActiveCell.Offset(-4, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-4, 0) = ActiveCell Then ActiveCell.Offset(-4, 0) = "" End If End If
If ActiveCell.Offset(-5, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-5, 0) = ActiveCell Then ActiveCell.Offset(-5, 0) = "" End If End If
If ActiveCell.Offset(-6, 0).Interior.ColorIndex = xlNone Then If ActiveCell.Offset(-6, 0) = ActiveCell Then ActiveCell.Offset(-6, 0) = "" End If End If
If ActiveCell.Offset(1, 0) = ActiveCell Then ActiveCell.Offset(1, 0) = "" End If
If ActiveCell.Offset(2, 0) = ActiveCell Then ActiveCell.Offset(2, 0) = "" End If
If ActiveCell.Offset(3, 0) = ActiveCell Then ActiveCell.Offset(3, 0) = "" End If
If ActiveCell.Offset(4, 0) = ActiveCell Then ActiveCell.Offset(4, 0) = "" End If
If ActiveCell.Offset(5, 0) = ActiveCell Then ActiveCell.Offset(5, 0) = "" End If
If ActiveCell.Offset(6, 0) = ActiveCell Then ActiveCell.Offset(6, 0) = "" End If
И поменять порядок запросов для начала надо. Сначала сравнить значение, потом цвет ячеек пытать. А потом можно и цыклы пристегнуть. Скорости это не добавит, но код станет удобоваримее.
И поменять порядок запросов для начала надо. Сначала сравнить значение, потом цвет ячеек пытать. А потом можно и цыклы пристегнуть. Скорости это не добавит, но код станет удобоваримее.Апострофф
И поменять порядок запросов для начала надо. Сначала сравнить значение, потом цвет ячеек пытать. А потом можно и цыклы пристегнуть. Скорости это не добавит, но код станет удобоваримее.
Апострофф, Вы мне так говорите, как- будто я профессионал.
Цитата
И поменять порядок запросов для начала надо. Сначала сравнить значение, потом цвет ячеек пытать. А потом можно и цыклы пристегнуть. Скорости это не добавит, но код станет удобоваримее.
Апострофф, Вы мне так говорите, как- будто я профессионал.tasdel
Сообщение отредактировал tasdel - Воскресенье, 19.09.2021, 11:22
wild_pig, Вы не могли бы поправить код, чтобы он срабатывал отдельно на каждый выбранный мною диапазон. У меня бывают таблицы, которые я разделяю на множество диапазонов. [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim isect As Variant Dim rn As Range Set rn = Range("D19:AH19") Set isect = Application.Intersect(rn, Target) If isect Is Nothing Then Exit Sub Else Call ЗАЛИВКА End If End Sub
[/vba]
wild_pig, Вы не могли бы поправить код, чтобы он срабатывал отдельно на каждый выбранный мною диапазон. У меня бывают таблицы, которые я разделяю на множество диапазонов. [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim isect As Variant Dim rn As Range Set rn = Range("D19:AH19") Set isect = Application.Intersect(rn, Target) If isect Is Nothing Then Exit Sub Else Call ЗАЛИВКА End If End Sub