Eu uso dessa forma, e até agora não observei casos de lentidão; vê se ajuda:
Dim pConexao As ADODB.Connection
Dim pRs As ADODB.Recordset
Dim strTemp As String
Dim TempArray() As String
Dim i As Long
Dim ValorAntigo As String
Dim ValorAntigoNaLista As Boolean
On Error Resume Next
ValorAntigo = cmbBancoDados.Text
cmbBancoDados.Clear
ValorAntigoNaLista = False
Set pConexao = New ADODB.Connection
pConexao.Open "DRIVER={MySQL ODBC 3.51 Driver};user=" & txtNomeUsuario & ";password=" & txtPassword & ";server=" & txtHost & ";option=20499"
If pConexao.State = 1 Then
Set pRs = New ADODB.Recordset
pRs.Open " Databases", pConexao, adOpenForwardOnly, adLockReadOnly, adCmdText
If Not pRs.EOF Then
strTemp = Trim$(pRs.GetString(adClipString, , "", vbCrLf))
If strTemp <> "" Then
TempArray = Split(strTemp, vbCrLf)
For i = 0 To UBound(TempArray)
If Trim$(TempArray(i)) <> "" And LCase$(Trim$(TempArray(i))) <> "mysql" And LCase$(Trim$(TempArray(i))) <> "temp" Then
cmbBancoDados.AddItem Trim$(TempArray(i))
If Trim$(TempArray(i)) = ValorAntigo Then ValorAntigoNaLista = True
End If
Next i
End If
End If
End If