如何使用Excel中的VBA将表从Acces传输到Excel

时间:2015-12-03 18:52:32

标签: vba excel-vba excel

我在Access中有一个表,我需要定期转移到Excel。我想在我的Excel工作表中创建一个VBA脚本,这样我就可以在运行VBA脚本时立即将该表拉入。我通过执行手动步骤记录了以下VBA脚本,并正确地拉出了表格。但是,当我尝试从Excel运行VBA脚本时,它给出了“运行时错误1004:应用程序定义或对象定义的错误”,并突出显示VBA脚本底部的以下行: .ListObject.DisplayName =“Table_Query_from_MS_Access_Database8”

非常感谢任何帮助!

 Sub TestMacro()

    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
        "ODBC;DSN=MS Access Database;DBQ=C:\Users\ariahm\Desktop\AA-Quarterly TSO Changes - December 2015.mdb;DefaultDir=C:\Users\ariahm\Desk" _
        ), Array("top;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;")), _
        Destination:=Range("$C$5")).QueryTable
        .CommandText = Array( _
        "SELECT Test_AA.RPT_DT, Test_AA.INDX_SYM_TX, Test_AA.INDX_SRC_CD, Test_AA.ISSUE_ID, Test_AA.ISSUE_SYM_ID, Test_AA.ORG_NM, Test_AA.`Current Index Shares`, Test_AA.`Current TSO`, Test_AA.`Current Date`, " _
        , _
        "Test_AA.`Current Source`, Test_AA.`New Index Shares`, Test_AA.`New TSO`, Test_AA.`New Date`, Test_AA.`New Source`, Test_AA.`TSO Change`, Test_AA.`TSO Pct Change`, Test_AA.`IS Change`, Test_AA.`IS Pct " _
        , _
        "Change`, Test_AA.`All New Index Shares`, Test_AA.`All New TSO`, Test_AA.`All New Date`, Test_AA.`All New Source`, Test_AA.Global, Test_AA.MIC_CD, Test_AA.BRS_ID, Test_AA.`Current Float Factor`, Test_A" _
        , _
        "A.`Current Float Date`, Test_AA.`Current Float Shares`, Test_AA.`New Float Factor`, Test_AA.`New Float Date`, Test_AA.`New Float Shares`, Test_AA.`All New Float`, Test_AA.`All New Float Date`, Test_AA" _
        , _
        ".`All New Float Shares`, Test_AA.Reason, Test_AA.`Entered By - Initials`, Test_AA.`Date Entered`, Test_AA.`Prelim Current Float Shares`, Test_AA.`Prelim New Float Shares`, Test_AA.SEDOL_ID" & Chr(13) & "" & Chr(10) & "FROM Test_" _
        , "AA Test_AA")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Table_Query_from_MS_Access_Database8"
        .Refresh BackgroundQuery:=False
    End With
End Sub

1 个答案:

答案 0 :(得分:0)

@ScottHoltzman在评论中写道:

  

为什么不直接在Access数据库中编写查询并设置数据连接,只需在宏中编写void diff_abs(float a, float b) { //change the return value to void //float *pa = &a; //you are not using this variable float *pb = &b; float tmp = a; a = a-b; b = *pb-tmp; printf("%.2f\n", a); printf("%.2f\n", b); return; } ThisWorkbook.RefreshAll。这样简单得多。但要回答您的问题,因为您已经有一个名为ThisWorkbook.Connections("myConn").Refresh的表(从您第一次设置时),Excel会抛出一个错误,因为它不能有两个具有相同名称的对象。如果你真的想这样做,你必须在重新导入之前删除你的表。