Estoy haciendo una macro que se conecte a una base de datos de Access y me traiga la información por SQL, que tome como filtros ciertos campos que estan en excel. Necesito que se vayan actualizando ciertas celdas a medida que se va encontrando la información, el código que utilizo es el siguiente:
Esto lo tengo en un combobox que al seleccionar de una lista este busque la información correspondiente:
Hasta ahora el código funciona, pero es realmente lento, no se si la conexión la deba crear dentro del ciclo, o si se puede hacer afuera. Pero cuando lo hago por fuera me sale un error la siguiente vez que va a ejecutar el "recSet.Open strSQL, datConnection"
Private Sub ComboBox1_Change()
Dim datConnection As ADODB.Connection
Dim recSet As ADODB.Recordset
Dim strDB, strSQL As String
Dim strTabla, Delegacion, Mes As String
Dim lngTablas As Long
Dim i As Long
strDB = "C:\CMO.accdb"
strTabla = "Base"
Delegacion = "'" & ComboBox1.Value & "'"
Mes = "'" & ComboBox2.Value & "'"
'plan = "'1. Protección de redes'"
Origen = "'R2015'"
Set datConnection = New ADODB.Connection
Set recSet = New ADODB.Recordset
datConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source =" & strDB & ";"
For i = 12 To 40
plan = "'" & ActiveSheet.Cells(i, 3).Value & "'"
If ComboBox1.Value = "ECA" Then
strSQL = "Select * from " & strTabla
Else
strSQL = "Select Acciones from " & strTabla & " where Delegación = " & Delegacion & " and Mes = " & Mes & " and Plan = " & plan & " and Clasificación = " & Origen
End If
recSet.Open strSQL, datConnection
ActiveSheet.Cells(i, 14).CopyFromRecordset recSet
recSet.NextRecordset
Next
'desconectar
recSet.Close: Set recSet = Nothing
datConnection.Close: Set datConnection = Nothing
End Sub
Alquien sabe si puedo hacer esto de otra forma?? o como puedo hacer más eficiente el código?
Gracias