VBA excel – 当任何一个单元格被更改时,更改基于彼此的两个单元格的值

我试图在Excel中制作货币转换器。

Cell B1 = exchange rate cell B2 = base currency amount cell B3 = counter currency amount. 

例:

 B1 = 1.3, B2 = Euro amount, B3 = USD amount. 

所有三个单元通过公式B3 = B1*B2相互连接。

我希望能够在B2处input一个值, B3自动更新(B3 = B2*B1)

当我在B3处input值时, B2自我更新(B2 = B3/B1)

下面的代码是我能想到的最好的,但它创build了一个堆栈空间错误,因为( 我猜,它进入了一个无限循环(当B2被更新时, B3更新自己,然后又更新B2 .. )。

任何build议?

 Private Sub Worksheet_Change(ByVal Target As Range) Dim EUR As Range Set EUR = Range("b2") Dim USD As Range Set USD = Range("b3") If Not Application.Intersect(EUR, Range(Target.Address)) Is Nothing Then Sheets("sheet1").Range("B3").Value = Range("B2") * Range("B1") Else If Not Application.Intersect(USD, Range(Target.Address)) Is Nothing Then Sheets("sheet1").Range("B2").Value = Range("B3") / Range("B1") End If End If End Sub 

如果崩溃确实是由于无限循环造成的,则可以尝试在macros的开始处禁用Excel事件,并在最后重新启用它们。

Snipplet,根据这个职位 :

 Application.EnableEvents = False ' Your code Application.EnableEvents = True 

像这样的东西会更容易阅读。 你可能需要玩公式,因为我不是100%确定你在做什么:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then Range("B3") = Range("B2") * Range("B1") End If If Target.Address = "$B$3" Then Range("B2") = Range("B3") / Range("B1") End If End Sub