Excel VBA 多个更改事件导致堆叠不足 space

Excel VBA multiple change events causing insufficient stacking space

我正在制作一个表格来计算我们出租房间的价格。除其他外,此费用基于到达和离开日期。您可以在下面看到表格的屏幕截图; - "Aankomst"(第一次约会)表示 "Arrival" - "Vertrek"(第二个日期)表示"Departure"

如您所见,我添加了按钮来分别减少或增加日期。我还确保纠正不可能的值。出发日期永远不能等于或小于到达日期。当尝试减少出发日期或增加到达日期时,错误时会触发。

手动输入值时,不会进行此检查。一些搜索让我了解到我可以使用更改事件宏来做到这一点。

我写了这段代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False


If Target.Address = "$B" And Range("$b").Value + 1 >= Range("$b").Value Then
Range("$b").Value = Range("$b").Value + 1
End If

If Target.Address = "$B" And Range("$b").Value - 1 <= Range("$b").Value Then
Range("$b").Value = Range("$b").Value - 1
End If

Application.ScreenUpdating = True
End Sub

B5 是包含到达日期的单元格,b6 是包含出发日期的单元格。触发时,此宏应检查更改了哪个单元格(b5 或 b6)以及 arr.日期等于或高于 dep。日期。如果是,则自动更改另一个单元格(未手动更改的单元格)。

现在,当我省略第二个 if 语句时,它工作得很好。如果我省略第二个 if 语句,它也能正常工作。当两个语句都处于活动状态时,它每次都会出错。我收到一条提示 'insufficient stacking space'(从荷兰语翻译而来)。

我也试过这段代码,使用案例:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False

If Range("b6").Value - 1 <= Range("b5").Value Then

Select Case Target.Address(0, 0)
   Case "b5": Range("vertrek").Value = Range("aankomst").Value + 1
   Case "b6": Range("aankomst").Value = Range("vertrek").Value - 1
End Select

End If

Application.ScreenUpdating = True
End Sub

...但也没有成功,同样的错误。当我调试时,我可以看到日期确实在必要时更改了,所以我假设我以某种方式创建了一个无限循环或 smth,这导致 Excel 出现错误。

有谁知道我的错误在哪里或者有谁知道实现我的目标的另一种方法吗?

防止重复引发同一事件:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.EnableEvents = False

    If Target.Address = "$B" And Range("$b").Value + 1 >= Range("$b").Value Then
        Range("$b").Value = Range("$b").Value + 1
    End If

    If Target.Address = "$B" And Range("$b").Value - 1 <= Range("$b").Value Then
        Range("$b").Value = Range("$b").Value - 1
    End If

Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub