Сохранение ячейки без изменений при определенных условиях - PullRequest
0 голосов
/ 04 мая 2018

Я ищу способ сохранить формулу в ячейке каждый раз, когда активна другая ячейка.

Private Sub Worksheet_Change(ByVal Target As Range)

     If ActiveSheet.Range("AL2").Value = 1 Then
          ActiveSheet.Range("AK14").Value = ActiveSheet.Range("AL8").Value
     Else
     End If
 End Sub

Так что, если ячейка AL2 равна 1 (так, моя желаемая активная ячейка), я хочу иметь определенное значение в ячейке AK14. Если ячейка AL2 НЕ равна 1, я хочу просто оставить значение в AK14 неизменным (например, кто-нибудь может его перезаписать).

В данный момент Excel теряется со второй частью: if AL2 = 0, и я получаю сообщение об ошибке.

Если мне нужны два условия, могу ли я просто поставить другое If?

Private Sub Worksheet_Change(ByVal Target As Range)

     Application.EnableEvents = False
     If Range("AL2").Value = 1 Then Range("F11").Value = Range("AK7").Value
     Application.EnableEvents = True

 End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

     Application.EnableEvents = False
     If Range("AL2").Value = 2 Then Range("J11").Value = Range("AL7").Value
     Application.EnableEvents = True

 End Sub

так что я хочу эти два макроса ..

1 Ответ

0 голосов
/ 04 мая 2018

Когда вы изменяете значение в ячейке, в событии Worksheet_Change вы должны отключить эти события. В противном случае он начинает называть себя:

Private Sub Worksheet_Change(ByVal Target As Range)

     Application.EnableEvents = False
     If Range("AL2").Value = 1 Then Range("AK14").Value = Range("AL8").Value
     Application.EnableEvents = True

 End Sub

Тогда, в качестве следующего шага, это действительно хорошая практика - использовать здесь ловушку ошибок с .EnableEvents:

Private Sub Worksheet_Change(ByVal Target As Range)

    On Error GoTo Worksheet_Change_Error

    Application.EnableEvents = False
    If Range("AL2").Value = 1 Then Range("AK14").Value = Range("AL8").Value
    Application.EnableEvents = True

    On Error GoTo 0
    Exit Sub

Worksheet_Change_Error:

    Debug.Print "Error " & Err.Number & " (" & Err.Description & ") "
    Application.EnableEvents = True

End Sub
...