我需要制作一个系统,其中VBA计算产品数量,然后将X的总结束。
此处示例:
目前,我有这段代码,但它无效:
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
答案 0 :(得分:0)
我得到了这些结果......
来自此代码:
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”。这仍然可以正确地完成。
注意:如果我解释了要求将金额乘以错误的价格,那么只需消除所有金额参考。
我得到了这些结果......
使用此代码:
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