在 宏鹏 同志的基础上加了一个提示已存在:
Option Compare Database
'MultComb和MultComb1的区别:MultComb重复先择会整个组合框选择的内容会清空,只留下重选的那个,MultComb1则会把前面选的重复的去掉,MultComb2则则提示已存在
Public Function MultComb()
Dim i As Integer, strList As String
With Screen.ActiveControl
For i = 1 To .ListCount
strList = IIf(Nz(strList) = "", "", strList & ";") & .ItemData(i) '如果字符串为空,那么就是下拉列表的第几项的值,否则就是字符串长度加上分号再加上下拉列表的第几项的值
Next
If InStr(1, .Tag, .Text) = 0 And InStr(1, strList, .Text) > 0 Then 'InStr([起始,] 接受搜索的字符串,被搜索的字符串[,匹配模式]),从 Start 位置开始,在 String1 中寻找 String2 ,如果没有找到,则返回0。如果 String1 或 String2 为Null,则返回Null,其他情况返回 String2 在 String1 中的起始位置。
.value = IIf(Nz(.Tag) = "", "", .Tag & ";") & .Text
End If
.Tag = .Text
End With
End Function
Public Function MultComb1()
Dim i As Integer, strList As String
With Screen.ActiveControl
If Len(Nz(.value)) = 0 Then
.Tag = ""
Else
'当选择的数据在组合框中已经存在时(数据在中间或末尾),把已存在的数据替换成空字符串
If InStr(1, .Tag, "、" & .value) > 0 Then
' MsgBox "输入的数据已经存在"
' Exit Function
.Tag = Replace(.Tag, "、" & .value, "")
End If
'当选择的数据在组合框中已经存在时(数据在开头),把已存在的数据替换成空字符串
If InStr(1, .Tag, .value) > 0 Then
.Tag = Replace(.Tag, .value, "")
End If
'写入选择的数据
.Tag = .Tag & "、" & .value
If Left$(.Tag, 1) = "、" Then
.Tag = Mid$(.Tag, 2)
End If
.value = .Tag
End If
End With
End Function
Public Function MultComb2()
Dim i As Integer, strList As String
With Screen.ActiveControl
If Len(Nz(.value)) = 0 Then
.Tag = ""
Else
'当选择的数据在组合框中已经存在时提示已存在
If InStr(1, .Tag, .value) > 0 Then
.value = .Tag
MsgBox "输入的数据已经存在"
Exit Function
.Tag = Replace(.Tag, ";" & .value, "")
End If
'写入选择的数据
.Tag = .Tag & ";" & .value
If Left$(.Tag, 1) = ";" Then
.Tag = Mid$(.Tag, 2)
End If
.value = .Tag
End If
End With
End Function