【发布时间】:2019-03-28 13:29:34
【问题描述】:
我正在尝试从我的下拉菜单中进行计算。 这就是我的下拉菜单的样子。 类别
- AAA
- BBB
- CCC
- DDD
这些是与我的下拉菜单关联的值。 类别类别值
- AAA 1
- 血脑屏障 2
- CCC 3
- DDD 4
我为多选添加了 VBA 代码,还添加了简单的 Vlookup 公式来检索类别的值。
=VLOOKUP(E2;Sheet2!I2:J5;2;)
使用 VBA 代码,我可以选择所有三个类别并稍后删除所选类别。但我无法检索所选类别的总和。例如我希望如果客户选择类别 AAA 和 CCC,他/她应该能够看到总和为 4。此外,如果客户首先选择所有三个类别,然后删除其中一个类别,那么总和也应该得到更新。我不知道如何更新我的 Vlookup 公式以获得总和。
这是我的多选 VBA 代码。
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated: 2016/4/12
Dim xRng As Range
Dim xValue1 As String
Dim xValue2 As String
If Target.Count > 1 Then Exit Sub
On Error Resume Next
Set xRng = Cells.SpecialCells(xlCellTypeAllValidation)
If xRng Is Nothing Then Exit Sub
Application.EnableEvents = False
If Not Application.Intersect(Target, xRng) Is Nothing Then
xValue2 = Target.Value
Application.Undo
xValue1 = Target.Value
Target.Value = xValue2
If xValue1 <> "" Then
If xValue2 <> "" Then
' If xValue1 = xValue2 Or _
' InStr(1, xValue1, ", " & xValue2) Or _
InStr(1, xValue1, xValue2 & ",") Then
If InStr(1, xValue1, xValue2 & ",") > 0 Then
xValue1 = Replace(xValue1, xValue2 & ", ", "") ' If it's in the middle with comma
Target.Value = xValue1
GoTo jumpOut
End If
If InStr(1, xValue1, ", " & xValue2) > 0 Then
xValue1 = Replace(xValue1, ", " & xValue2, "") ' If it's at the end with a comma in front of it
Target.Value = xValue1
GoTo jumpOut
End If
If xValue1 = xValue2 Then ' If it is the only item in string
xValue1 = ""
Target.Value = xValue1
GoTo jumpOut
End If
Target.Value = xValue1 & ", " & xValue2
End If
jumpOut:
End If
End If
Application.EnableEvents = True
End Sub
【问题讨论】:
-
请注意:看看使用
If.....then....elseif...else....end if或Select case这样你就可以摆脱GoTo jumpOut -
我应该用 VBA 来代替 Vlookup 编码?