2
Private Sub txtTotal1_Change()
Dim Final As Integer
If cbOldf_Change() Then
    olf1 = cbOldf.ActiveCell.Offset(0, 1)
    Final = oldf_col * quantity
ElseIf cbHaribo1_Change() Then
    haribo1 = cbHaribo1.ActiveCell.Offset(0, 1) + 1
    Final = haribo_col * quantity
ElseIf cbOldf_Change() = cbHaribo1_Change() Then
    oldf_1 = cbOldf.ActiveCell.Offset(0, 1) + 1
    haribo1 = cbHaribo1.ActiveCell.Offset(0, 1) + 1
    Final = oldf_1 + haribo1 * quantity
End If
If txtQuantity1_Change() Then
    txtTotal.Value = Final
End Sub

私はvbaが初めてです。別の製品 (ハリボーと古いお気に入り) の 2 つのワークシートがあります。これらのワークシートから製品を取得するためのコンボ ボックスと、数量を入力するためのテキスト ボックスがあります。製品ワークシートでは、製品名は列 A にあり、価格は列 B にあります。私が達成したいのは、コンボ ボックスから製品名を選択し、テキスト ボックスに数量を入力して合計価格を表示できるようにすることです。計算され、「合計」テキストボックスに表示されます。

私はこれに慣れていないので、私のひどいコードを見てください。正直なところ、5時間ほどの努力をしましたが、今は頭が痛いです! 助けを求めるか、正しい方向に向けてください。

編集:これが私のワークブックですhttps://www.dropbox.com/s/49iym4exbcgmhcq/Main%20Page.xlsm

4

1 に答える 1

1

このコードを使用して合計を設定してみてください。

Private Sub SetTotal()
    Dim dblTotal As Double
    Dim dblQuantity As Double
    If IsNumeric(Me.txtQuantity1) Then
        dblQuantity = CDbl(Me.txtQuantity1)
    End If
    If cbHaribo1.Value <> "" Then
        dblTotal = dblQuantity * GetPrice(Sheets("HARIBO").Range("A:B"), cbHaribo1.Value)
    End If

    If Me.cbOldf.Value <> "" Then
        dblTotal = dblTotal + dblQuantity * GetPrice(Sheets("OLDFAVORITES").Range("A:B"), cbOldf.Value)
    End If
    Me.txtTotal1 = Format(dblTotal, "0.00")
End Sub

Private Function GetPrice(rng As Range, strProduct As String) As Double
    On Error GoTo ErrorHandler
    GetPrice = WorksheetFunction.VLookup(strProduct, rng, 2, False)
    Exit Function
ErrorHandler:
    GetPrice = 0
End Function

このコードをトリガーするには、次のイベントを挿入する必要があります。

Private Sub cbHaribo1_Change()
    SetTotal
End Sub
Private Sub cbOldf_Change()
    SetTotal
End Sub    
Private Sub txtQuantity1_Change()
    SetTotal
End Sub

フォームが少しあいまいであることに注意してください。現時点では、コードはHariboとOldFavoritesの両方の数量に​​適用されます。2番目の数量フィールドを作成するか、HariboまたはOldFavoritesをグレー表示するオプションボックスを挿入することをお勧めします...

于 2013-03-11T20:15:18.213 に答える