Диапазон Vba и два цикла «Для каждой ячейки в rng»

#vba #for-loop #range

Вопрос:

Новичок в кодировании VBA — так что потерпите меня здесь… Когда ячейка в диапазоне изменяется, я хочу обновить другую ячейку со смещением. Это относится к двум разным диапазонам и должно быть запущено на Worksheet_Change

Я закодировал это — оно работает для каждого из диапазонов отдельно, но не с обоими:

 Private Sub Worksheet_Change(ByVal Target As Range)  Dim rng As Range  Dim rng2 As Range    Set rng = Intersect(Target, Range("B3:B13"))  Set rng2 = Intersect(Target, Range("G3:G13"))    If rng Is Nothing And rng2 Is Nothing Then Exit Sub  Application.EnableEvents = False    If rng2 Is Nothing Then  Dim cell As Range  For Each cell In rng  If IsNumeric(cell.Value) And Not IsEmpty(cell.Value) Then  cell.Offset(0, 1).Value = cell.Offset(0, 1).Value - cell.Value  cell.ClearContents  Application.EnableEvents = True  End If  Next cell  End If   If rng Is Nothing Then  Dim cell As Range  For Each cell In rng2  If IsNumeric(cell.Value) And Not IsEmpty(cell.Value) Then  cell.Offset(0, -4).Value = cell.Offset(0, -4).Value - cell.Value  cell.ClearContents  Application.EnableEvents = True  End If  Next cell  End If End Sub  

При попытке этой комбинации я получаю сообщение «Дубликат объявления в текущей области». Я пробовал различные модификации, но безуспешно…

Комментарии:

1. Просто удалите 2-е объявление cell . Областью действия (локальной) переменной в VBA всегда является вся подпрограмма/функция, поэтому вы не можете объявить ее во второй раз. Вы должны, кстати, переместить процедуру Application.EnableEvents в конец, иначе второе изменение, которое выполняет ваш код (например, во 2-м цикле), снова вызовет событие изменения