Requête d'appel dans Access 2007 de macro dans Excel 2007

J'ai une database, qui est liée au file CSV. Le nom de la database est AllInformation , stocké sur le path = some_path . Dans AllInformation , j'ai une requête (nommée MyQuery ) avec le paramètre. Son nom est [Date actuelle] , le type de ce dernier date.

1) Comment puis-je me connecter à la database – AllInformation à partir du code Excel VBA (j'utilise Excel 2007)? La database, AllInformation , n'a pas de mot de passe. 2) Comment puis-je exécuter la requête – MyQuery avec le paramètre paramétré [Date actuelle] ? 3) Comment puis-je copyr les résultats de MyQuery dans la feuille Excel?

J'ai besoin de cela parce que la search dans le file CSV directement prend beaucoup de time. MyQuery trouve ce dont j'ai besoin pendant 4 minutes, alors que la search directe via VBA dans le file CSV prend environ 1 heure.

Merci pour vos réponses.

Comme note secondaire, il est probable que le code que vous avez écrit pour searchr le file CSV a directement un problème de design qui rend très inefficace d'get des time de search différents.

Cela dit, procédez comme suit:

  1. Ajoutez une reference au moteur de database Access au projet Excel VBA. Dans Office 2010, cela serait une reference à la Microsoft Office 14.0 Access database engine Object Library . Cette bibliothèque fournit une interface basée sur DAO au moteur de database Access.
  2. Consultez comment utiliser DAO sur Google. Recherchez comment exécuter une requête avec les parameters.
  3. Consultez également comment copyr un jeu d'loggings DAO dans une feuille de calcul Excel.

Ce sont des tâches courantes auxquelles vous posez des questions. Vous devriez pouvoir find de nombreuses réponses en ligne si vous searchz quelques secondes. J'ai fourni suffisamment d'informations pour que vous puissiez find les réponses.

J'ai découvert cela à partir de Excel VBA, en consultant le file Access.NET 2007.doc:

 ' ' Variables: ' i: counter ' j: counter ' nFlds: number of fields in the query ' nMax: maximum number of records to be exported, 0=no limit ' strQry: query name ' ' objApp: Access.Application ' qdf: QueryDef ' rst: Recordset ' Function daoDoQuery() ' Dim i, j, nFlds, nMax, strQry ' Dim objApp, qdf Dim rst As DAO.Recordset ' Set objApp = CreateObject("Access.Application") objApp.OpenCurrentDatabase "some_path\AllInformation.accdb" ' ' get Recordset: ' strQry = "MyQuery" Set qdf = objApp.CurrentDb.QueryDefs(strQry) ' ' here [Current date] is entered: ' qdf.Parameters(0).Value = Now() Set rst = qdf.OpenRecordset(dbOpenDynaset) ' If (rst.EOF) Then Set rst = Nothing daoDoQuery = 0 Exit Function End If ' nFlds = rst.Fields.Count ' ' create a new Excel Workbook to write results: ' i = 1 Application.ScreenUpdating = False Workbooks.Add For j = 1 To nFlds With Cells(i, j) .Font.Bold = True .Font.Size = 12 .Value = rst.Fields(j - 1).Name End With Next ' nMax = 50 i = i + 1 ' Do While (Not rst.EOF) ' For j = 1 To nFlds Cells(i, j).Value = rst(j - 1) Next ' rst.MoveNext i = i + 1 If (nMax > 0) Then If (i > nMax) Then Exit Do End If End If Loop ' Application.ScreenUpdating = True ' rst.Close Set rst = Nothing Set qdf = Nothing Set objApp = Nothing ' daoDoQuery = 1 ' End Function 

Cela fera le travail, il créera un nouveau classur Excel, avec la 1ère feuille de calcul en tant que list des résultats:

 daoDoQuery