Доброго вечера! Запуск макроса при изменении любой ячейки нагружает лишними расчетами. Ни как не могу дать ума, надо запускать макрос при внесении изменении в определённые строки 21,29,37,45....+8 диапазон (21:2000) (с шагом +8)
Как заставить его работать при изменениях с 21 по 2000 строку с шагом +8, неужели только прописывать это дело для +200 строк (21,29,37....) (((
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Rows(21)
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
MsgBox "OK!!"
End If
End Sub
Или по эффекту это будет равнозначно запуску макроса при изменении любой ячейки?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range, i As Integer
For i = 21 To 2000 Step 8
Set KeyCells = Rows(i)
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
MsgBox "OK!!"
Exit For
End If
Next i
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RowNumber As Long
RowNumber = Target.Row
If RowNumber > 20 Then
If (RowNumber - 21) Mod 8 = 0 Then
MsgBox "OK!!"
End If
End If
End Sub
DANIKOLA, Цикл!! Точно, спасибо!! Все гениальное просто Еще и зажать по последней ячейке столбца, чтоб уж наверняка. Решение
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range, i As Integer
F = Sheets("Base").Range("A10000").End(xlUp).Row
For i = 21 To F Step 8
Set KeyCells = Rows(i)
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
MsgBox "OK!!" 'Здесь вставьте свой макрос
Exit For
End If
Next i
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RowNumber As Long, ColumnsUsed As Integer
ColumnsUsed = 40 ' Число используемых колонок измените вручную
RowNumber = Target.Row
If RowNumber > 20 And RowNumber < 2000 And Target.Column < ColumnsUsed Then
If (RowNumber - 21) Mod 8 = 0 Then
MsgBox "OK!!"
End If
End If
End Sub
Решение New, нахожу более лаконичным, так что использую его. Циклом - это затратно для ресурсов системы.