Vba 在数据验证单元中输入值时如何避免重复,该单元允许多个选择
我的数据库中有某些列,需要我键入新数据并进行选择。因此,我通过数据验证制作了一个下拉列表。我可以根据代码选择多个选项,但如果我在该单元格中键入任何数据,原始选项将显示两次 单元格包含以下选项:ABC、XYZVba 在数据验证单元中输入值时如何避免重复,该单元允许多个选择,vba,excel,Vba,Excel,我的数据库中有某些列,需要我键入新数据并进行选择。因此,我通过数据验证制作了一个下拉列表。我可以根据代码选择多个选项,但如果我在该单元格中键入任何数据,原始选项将显示两次 单元格包含以下选项:ABC、XYZ 我选择了ABC,在WWW 单元格将显示ABC、ABC、WWW 任何人都可以帮助避免重复原来的选择吗 这是我目前拥有的代码,我试图删除“oldVal”部分以防止重复,它阻止我选择多个选项 Private Sub Worksheet_Change(ByVal Target As Range)
我选择了ABC,在WWW
单元格将显示ABC、ABC、WWW 任何人都可以帮助避免重复原来的选择吗 这是我目前拥有的代码,我试图删除“oldVal”部分以防止重复,它阻止我选择多个选项
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDV As Range
Dim oldVal As String
Dim newVal As String
Dim lUsed As Long
If Target.Count > 1 Then GoTo exitHandler
On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo exitHandler
If rngDV Is Nothing Then GoTo exitHandler
If Intersect(Target, rngDV) Is Nothing Then
'do nothing
Else
Application.EnableEvents = False
newVal = Target.Value
Application.Undo
oldVal = Target.Value
Target.Value = newVal
If Target.Column = 28 Or Target.Column = 29 Or Target.Column = 30 Then
If oldVal = "" Then
'do nothing
Else
If newVal = "" Then
'do nothing
Else
lUsed = InStr(1, oldVal, newVal)
If lUsed > 0 Then
If oldVal = newVal Then
Target.Value = ""
ElseIf Right(oldVal, Len(newVal)) = newVal Then
Target.Value = Left(oldVal, Len(oldVal) - Len(newVal) - 1)
Else
Target.Value = Replace(oldVal, newVal & vbLf, "")
End If
Else
Target.Value = oldVal & vbLf & newVal
End If
End If
End If
End If
End If
exitHandler:
Application.EnableEvents = True
End Sub
有趣的代码。仅供参考,对我来说效果很好。当我选择ABC,然后键入WWW时,它将显示ABC-WWW。当我再次键入WWW时,它将被删除。如果我选择ABC,同样的事情也会发生。代码没有问题。WWW不应该出现在下拉列表中,如果你已经将WWW添加到下拉列表中,那么它工作正常。不,不在列表中,我明白了。也许您可以打开一个新的工作表,复制此代码并创建数据验证,然后再次检查,您的工作表中是否有其他代码?是的,我刚刚在其他工作簿上尝试过它,它工作正常,但它没有多选功能,就像现在我无法选择ABC和XYZ显示在同一单元格中一样。///不,我在工作表中没有任何其他代码,但我在模块中有代码。我逐行检查了您的代码,没有逻辑错误。此外,没有重复项,我选择/输入的内容都添加到列表中。再次键入也会删除它们。有趣的代码。仅供参考,对我来说效果很好。当我选择ABC,然后键入WWW时,它将显示ABC-WWW。当我再次键入WWW时,它将被删除。如果我选择ABC,同样的事情也会发生。代码没有问题。WWW不应该出现在下拉列表中,如果你已经将WWW添加到下拉列表中,那么它工作正常。不,不在列表中,我明白了。也许您可以打开一个新的工作表,复制此代码并创建数据验证,然后再次检查,您的工作表中是否有其他代码?是的,我刚刚在其他工作簿上尝试过它,它工作正常,但它没有多选功能,就像现在我无法选择ABC和XYZ显示在同一单元格中一样。///不,我在工作表中没有任何其他代码,但我在模块中有代码。我逐行检查了您的代码,没有逻辑错误。此外,没有重复项,我选择/输入的内容都添加到列表中。再次打字也会删除它们。