在特定条件下保持细胞不变

时间:2018-05-04 08:54:34

标签: excel vba excel-vba cell

我正在寻找在每次其他单元格处于活动状态时将公式保留在单元格中的方法。

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

因此,如果Cell 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 :(得分:2)

更改单元格中的值时,在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使用Error-catcher是一个很好的做法:

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