|

楼主 |
发表于 2025-3-25 11:15
|
显示全部楼层
如果有规格为空,会提示运行出错,Private Sub Worksheet_Change(ByVal Target As Range)
Dim d(1), m%, ar, i%, k$, va, t, s$
Set d(0) = CreateObject("scripting.dictionary")
Set d(1) = CreateObject("scripting.dictionary")
If Target.Address <> "$C$3" Then Exit Sub
If Target.Value = "" Then Exit Sub
m = Sheet2.[C4].End(4).Row
ar = Sheet2.[C4].Resize(m, 2)
For i = 1 To UBound(ar)
d(0)(ar(i, 1)) = ""
d(1)(ar(i, 1) & "|" & ar(i, 2)) = ""
Next i
k = Join(d(0).keys, ",")
With Target.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=k
.ShowInput = True
.InCellDropdown = True
End With
va = Target.Value
Set t = Target.Offset(0, 2)
t.Value = "请选择:"
For Each f In d(1).keys
If InStr(f, va) > 0 Then
s = s & Split(f, "|")(1) & ","
End If
Next f
s = Mid(s, 1, Len(s) - 1)
With t.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=s(这句有错)
.ShowInput = True
.InCellDropdown = True
End With
Set d(0) = Nothing
Set d(1) = Nothing
End Sub
|
-
|