VBA: Interrogation d'Accès avec Excel. Pourquoi est-elle si lente?

J'ai trouvé ce code en ligne de requête d'Accès et de saisie de données dans excel (2003), mais il est beaucoup plus lent que ce qu'elle devrait être:

Sub DataPull(SQLQuery, CellPaste)
Dim Con As New ADODB.Connection
Dim RST As New ADODB.Recordset
Dim DBlocation As String, DBName As String
Dim ContractingQuery As String

If SQLQuery = "" Then

Else
    DBName = Range("DBName")
    If Right(DBName, 4) <> ".mdb" Then DBName = DBName + ".mdb"

    DBlocation = ActiveWorkbook.Path
    If Right(DBlocation, 1) <> "\" Then DBlocation = DBlocation + "\"

    Con.ConnectionString = DBlocation + DBName
    Con.Provider = "Microsoft.Jet.OLEDB.4.0"
    Con.Open

    Set RST = Con.Execute(SQLQuery)
    Range(CellPaste).CopyFromRecordset RST

    Con.Close
End If

End Sub

Le problème est que ce code est très longue. Si j'ouvre l'Accès et il suffit d'exécuter la requête en elle, il faut environ 1/10e de l'heure. Est-il de toute façon à accélérer le processus? Ou toute raison de ce qui pourrait être si long? Toutes mes questions sont simples requêtes select avec de simples où les états et pas de jointures. Même un "select * from [test]" requête prend beaucoup plus de temps qu'il ne le devrait.

EDIT: je dois préciser que la ligne "de la Gamme(CellPaste).CopyFromRecordset TVD" est celui qui prend un temps considérable.

Lors de l'exécution de l'étape, à travers la mode, la ligne de code qui prend plus de temps?
Gamme(CellPaste).CopyFromRecordset TVD
Combien de disques avez-vous récupérer?
Hmm. Cela change tout. Je ne pense pas que vous aurez plus vite que le CopyFromRecorset. Aussi, vous devriez sérieusement envisager de renommer ce fil et la suppression de tous les sans pertinence des trucs dans votre post. L'accès n'a clairement rien à voir avec le problème, à mon humble avis.

OriginalL'auteur Dan | 2009-10-15