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