3

我想在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)

当我在 处输入值B3B2更新自身时(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
4

2 回答 2

1

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

Snipplet,基于这篇文章

Application.EnableEvents = False

' Your code

Application.EnableEvents = True
于 2013-01-22T08:01:59.503 回答
0

像这样的东西会更容易阅读。您可能需要使用公式,因为我不是 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
于 2013-01-22T09:10:12.323 回答