我在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
答案 0 :(得分:0)
为什么不直接在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会抛出一个错误,因为它不能有两个具有相同名称的对象。如果你真的想这样做,你必须在重新导入之前删除你的表。