Listo, le puse 2 controles.
El primero, es para saber cuántas filas tiene la base antes de filtrar:
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
u = Range("A" & Rows.Count).End(xlUp).Row
De esa forma se evitará el error cuando seleccionas el primer registro de tus datos, es decir, el que se encuentra en la fila 2 de tu hoja.
El segundo, es para verificar si existen datos con lo que seleccionaste en el combobox4:
u1 = Range("A" & Rows.Count).End(xlUp).Row
If u1 = 1 Then
MsgBox "No existen datos datos con ese texto"
Exit Sub
End If
Si lo que seleccionaste o escribiste en el combobox4 no tiene una coincidencia, el autofiltro quedará solamente con la fila 1 de los encabezados, entonces si la última fila con datos es la 1 entonces no encontró coincidencias.
Te dejo la macro actualizada:
Private Sub ComboBox4_Change()
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
u = Range("A" & Rows.Count).End(xlUp).Row
'
Selection.AutoFilter Field:=3, Criteria1:=CStr("*" + ComboBox4.Text) + "*"
If ComboBox4.Text = "" Then
Selection.AutoFilter Field:=3
End If
ListBox1.Clear
'
u1 = Range("A" & Rows.Count).End(xlUp).Row
If u1 = 1 Then
MsgBox "No existen datos datos con ese texto"
Exit Sub
End If
'
Dim celda As Range
With ListBox1
For Each celda In Range("A2:A" & u).SpecialCells(xlCellTypeVisible)
ListBox1.AddItem celda
O = ListBox1.ListCount - 1
ListBox1.List(O, 1) = celda.Offset(0, 1)
ListBox1.List(O, 2) = celda.Offset(0, 2)
ListBox1.List(O, 3) = celda.Offset(0, 3)
ListBox1.List(O, 4) = celda.Offset(0, 4)
ListBox1.List(O, 5) = celda.Offset(0, 5)
ListBox1.List(O, 6) = celda.Offset(0, 6)
ListBox1.List(O, 7) = celda.Offset(0, 7)
ListBox1.List(O, 8) = celda.Offset(0, 8)
ListBox1.List(O, 9) = celda.Offset(0, 9)
Next
End With
End Sub
'.[Sal u dos. Dante Amor. No olvides valorar la respuesta.