Страницы: 1
RSS
Запуск макроса при изменении определенных строк с шагом в диапазоне
 
Доброго вечера!
Запуск макроса при изменении любой ячейки нагружает лишними расчетами.
Ни как не могу дать ума, надо запускать макрос при внесении изменении в определённые строки 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

Или по эффекту это будет равнозначно запуску макроса при изменении любой ячейки?
Изменено: Watson2009 - 21.09.2020 18:53:54
 
Здравствуйте. А так?
Код
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
Изменено: Watson2009 - 21.09.2020 19:14:30
 
New, спасибо, тоже рабочий и лаконичный вариант  8)  
Изменено: Watson2009 - 21.09.2020 20:43:33
 
Код
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, нахожу более лаконичным, так что использую его. Циклом - это затратно для ресурсов системы.
 
Watson2009, а зачем Вы дублируете предлагаемые варианты?
 
Исправлено, в 1 случае добавлено ограничение по циклу, 2 дубль удален.
Страницы: 1
Наверх