2013-10-28 63 views
0

我有一个数据库,它链接到CSV文件。数据库的名称是AllInformation,存储在路径= some_path。在AllInformation,我有一个查询(命名为MyQuery)与参数。它的名字是[当前日期],后者的类型是日期。从Excel 2007中的宏调用Access 2007中的查询

1)如何连接到Excel VBA代码(我正在使用Excel 2007)的数据库 - AllInformation?数据库,AllInformation,没有任何密码。 2)如何运行查询 - MyQuery与设置的参数[当前日期]? 3)如何将MyQuery的结果复制到Excel工作表中?

我需要这个,因为直接在CSV文件中搜索非常耗时。 MyQuery可在4分钟内找到我需要的内容,而通过VBA在CSV文件中直接搜索大约需要1个小时。

谢谢你的回答。

+0

看看这个:http://www.ozgrid.com/forum/showthread.php?t=91639它提供了你所需要的基础知识。 –

回答

0

作为一个方面说明,您编写的直接搜索CSV文件的代码有一些设计问题,导致搜索时间变得非常低效。

这就是说,做到以下几点:

  1. 添加到Access数据库引擎的引用到Excel的VBA项目。在Office 2010中,这将参考Microsoft Office 14.0 Access database engine Object Library。该库为Access数据库引擎提供了一个基于DAO的接口。
  2. 查看如何在Google上使用DAO。查看如何使用参数运行查询。
  3. 另请参阅如何将DAO记录集复制到Excel电子表格中。

这些是您所询问的常见任务。如果您花费几秒钟搜索,您应该能够在网上找到许多答案。我提供了足够的信息,您应该能够找到答案。

0

我从Excel VBA摸索出这一点,查询Ac​​cess 2007年X.accdb文件:

' 
' 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 

这将做的工作,金正日将创建一个新的Excel工作簿,由第1工作表作为上市结果:

daoDoQuery 
+0

@ mr.M,一个使用DAO方法进行检查的新版本。 – jacouh