#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-м цикле), снова вызовет событие изменения