VBA excel-更改两个单元格';当任一单元格发生更改时,s值将基于彼此

VBA excel-更改两个单元格';当任一单元格发生更改时,s值将基于彼此,vba,excel,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处输入一个值,并且B3自动更新自身(B3=B2*B1) 当我在B3处输入值时,B2会自动更新(B2=B3/B1

我正在尝试在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
处输入一个值,并且
B3
自动更新自身
(B3=B2*B1)

当我在
B3
处输入值时,
B2
会自动更新
(B2=B3/B1)

下面的代码是我能想到的最好的代码,但它会产生一个堆栈外空间错误,因为(我猜,它会进入一个无限循环(当更新
B2
时,
B3
会更新自身,而这反过来又会更新
B2

有什么建议吗

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

如果崩溃确实是由于无限循环造成的,可以尝试在宏的开头禁用Excel事件,然后在最后重新启用它们

Snipplet,基于:


类似这样的内容会更容易阅读。您可能需要玩转公式,因为我不是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

首先尝试将值保留为整数,然后进行计算。亲爱的家伙,谢谢你的评论,但即使它们都是整数,也不会起作用。所有单元格都应该是数字,而不是公式。尝试调试它,并告诉哪一行提供了错误。请看这个@user1586765,你会从第三方数据下载
Curr rates
供应商?如果是这样的话,可以提出相应的解决方案。似乎你错过了我在上面发表的评论中的链接?:)似乎评论不是答案,@SiddharthRout。如果你的链接回答了这个问题,你应该把它的要点作为答案发布,或者把这个问题标记为重复
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