Dim Rng As Range Dim Arr As Variant Dim LastCell As Range Dim FindText As String Dim ItemCount As Long Dim Dic As Object Private Sub CbOption_Change() FindText = CbOption.Text If Len(FindText) > 0 Then If Dic.Exists(FindText) = False Then Call FilterItems End If End If End Sub Private Sub CbOption_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Application.EnableEvents = False If KeyCode = 13 Then LastCell.Value = CbOption.Text End If Application.EnableEvents = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.EnableEvents = False If Target.Column = 5 Then If Target.Rows.Count = 1 Then Set LastCell = Target Me.CbOption.Visible = True Me.CbOption.Left = Target.Left Me.CbOption.Top = Target.Top Me.CbOption.Width = Target.Width * 1.5 Me.CbOption.Height = Target.Height * 1.5 Me.CbOption.Text = "" Call AddItems End If Else Me.CbOption.Clear Me.CbOption.Visible = False End If Application.EnableEvents = True End Sub Private Sub AddItems() Me.CbOption.Clear Set Dic = CreateObject("Scripting.Dictionary") Set Rng = Application.ThisWorkbook.Worksheets("选项").Range("A1:A117") Arr = Rng.Value For i = LBound(Arr) To UBound(Arr) Key = CStr(Arr(i, 1)) Dic(Key) = "" Me.CbOption.AddItem Key Next i End Sub Private Sub FilterItems() ItemCount = Me.CbOption.ListCount - 1 Set Rng = Application.ThisWorkbook.Worksheets("选项").Range("A1:A117") Arr = Rng.Value For i = LBound(Arr) To UBound(Arr) Key = CStr(Arr(i, 1)) If Key Like "*" & FindText & "*" Then Me.CbOption.AddItem Key End If Next i For i = ItemCount To 0 Step -1 Me.CbOption.RemoveItem (i) Next i End Sub
时间: 2024-10-13 05:04:18