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. 

3 つのセルはすべて、式によって相互に接続されてい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 イベントを無効にし、最後に再度有効にすることができます。

この投稿に基づくスニペット:

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 に答える