Добрый день. Итак, есть две ячейки. Допустим С1 и С2. Цель - если ввожу данные в ячейку С1, то содержимое С2 должно заменяться на формулу "= С1 + 1". И наоборот, если ввожу данные в ячейку С2, то содержимое С1 должно замениться на формулу "= С2 + 2". Формулы для примера...
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C1")) Is Nothing Then
Range("C2").Formula = "=C1+1"
End If
If Not Intersect(Target, Range("C2")) Is Nothing Then
Range("C1").Formula = "=C2+2"
End If
End Sub
такая структура приводит к зацикливанию, что естественно, но как уйти от этого не придумывается...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("C1:C2")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Dim r&: r = Target.Row
Cells(3 - r, 3).FormulaR1C1 = "=R" & r & "C+" & r
Application.EnableEvents = True
End Sub
если пользователь переключится в R1C1 это "=C2+2" - рухнет
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("C2:C3")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Dim r&: r = Target.Row
If r = 2 Then
Cells(3, 3).FormulaR1C1 = "=ROUND(Салават_Go_по_Ррст(R" & r & "C),2)"
Else
Cells(2, 3).FormulaR1C1 = "=ROUND(Салават_Ррст_по_Go(R" & r & "C),2)"
End If
Application.EnableEvents = True
End Sub
У меня кроме ссылок на ячейки ещё и формулы меняются... А вот так ещё веселей
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("C2:C3")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Dim r&: r = Target.Row
If r = 2 Then
Cells(3, 3).Value = WorksheetFunction.Round(Салават_Go_по_Ррст(Target.Value), 2)
Else
Cells(2, 3).Value = WorksheetFunction.Round(Салават_Ррст_по_Go(Target.Value), 2)
End If
Application.EnableEvents = True
End Sub
Код Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C1")) Is Nothing Then If Left(Cells(1, 3).FormulaR1C1, 1) <> "=" Then
Range("C2").Formula = "=C1+1" End If End If
If Not Intersect(Target, Range("C2")) Is Nothing Then If Left(Cells(2, 3).FormulaR1C1, 1) <> "=" Then Range("C1").Formula = "=C2+2" End If End If End Sub
Можно добавить в изменяемых ячейках C1 и C2 проверку - если там формула, то есть содержимое начинается с "=", то макрос ничего не делает.