计算金额并将总数放在VBA中未显示的位置

时间:2016-04-17 15:45:58

标签: excel-vba vba excel

我需要制作一个系统,其中VBA计算产品数量,然后将X的总结束。

此处示例:

enter image description here

目前,我有这段代码,但它无效:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("H1:H150")) Is Nothing Then
        If Not IsEmpty(Target) Then
            Dim TargetPrice, MoveDown As Range
            Set MoveDown = Target
            Set TargetPrice = Target.Offset(, 1)
            Dim TotalPrice As Double
            If Not MoveDown.Value = "x" Then
                TotalPrice = TotalPrice + TargetPrice.Value
            Else
                Do Until IsEmpty(MoveDown.Value) Or Not MoveDown.Value = "x"
                    TotalPrice = TotalPrice + TargetPrice.Value
                    Set TargetPrice = TargetPrice.Offset(1)
                    Set MoveDown = MoveDown.Offset(1)
                Loop
            End If
            Set TargetPrice = TargetPrice.Offset(, 1)
            Range(TargetPrice.Address).Value = TotalPrice
        End If
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

我得到了这些结果......

enter image description here

来自此代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim TargetPrice As Range, MoveDown As Range
Dim TargetUnitPrice As Range, Amount As Range
Dim TotalPrice As Double


    If Not Intersect(Target, Range("H1:H150")) Is Nothing Then
        Set MoveDown = Target
        ' Capture the case where an "x" is not entered, but there are "x"'s above
        Do Until MoveDown.Offset(-1).Value <> "x"
            Set MoveDown = MoveDown.Offset(-1)
        Loop
        Set TargetUnitPrice = MoveDown.Offset(, 1)
        Set Amount = MoveDown.Offset(, -1)
        If Not IsEmpty(Target) Then
            TotalPrice = 0#
            Do Until IsEmpty(MoveDown.Value) Or Not MoveDown.Value = "x"
                TotalPrice = TotalPrice + (Amount.Value * TargetUnitPrice.Value)
                Set TargetUnitPrice = TargetUnitPrice.Offset(1)
                Set Amount = Amount.Offset(1)
                Set MoveDown = MoveDown.Offset(1)
            Loop
            TotalPrice = TotalPrice + (Amount.Value * TargetUnitPrice.Value)
            Set TargetPrice = MoveDown.Offset(, 2)
            TargetPrice.Value = TotalPrice
        End If
    End If

End Sub

注意:有些人可能会在“x”以下输入“m”。这仍然可以正确地完成。

注意:如果我解释了要求将金额乘以错误的价格,那么只需消除所有金额参考。

我得到了这些结果......

enter image description here

使用此代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim TargetPrice As Range, MoveDown As Range
Dim TargetUnitPrice As Range
Dim TotalPrice As Double


    If Not Intersect(Target, Range("H1:H150")) Is Nothing Then
        Set MoveDown = Target
        ' Capture the case where an "x" is not entered, but there are "x"'s above
        Do Until MoveDown.Offset(-1).Value <> "x"
            Set MoveDown = MoveDown.Offset(-1)
        Loop
        Set TargetUnitPrice = MoveDown.Offset(, 1)
        If Not IsEmpty(Target) Then
            TotalPrice = 0#
            Do Until IsEmpty(MoveDown.Value) Or Not MoveDown.Value = "x"
                TotalPrice = TotalPrice + TargetUnitPrice.Value
                Set TargetUnitPrice = TargetUnitPrice.Offset(1)
                Set MoveDown = MoveDown.Offset(1)
            Loop
            TotalPrice = TotalPrice + TargetUnitPrice.Value
            Set TargetPrice = MoveDown.Offset(, 2)
            TargetPrice.Value = TotalPrice
        End If
    End If

End Sub