Vba 将MS Access数据作为现有数据下方的新行插入Excel
我需要将MS Access表中的行导入Excel。下面的VBA宏就是这样做的Vba 将MS Access数据作为现有数据下方的新行插入Excel,vba,ms-access,excel,Vba,Ms Access,Excel,我需要将MS Access表中的行导入Excel。下面的VBA宏就是这样做的 Sub Macro1() ' ' With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _ "ODBC;DSN=MS Access Database;DBQ=C:\Documents and Settings\Administrator\My Documents\test_db.mdb;DefaultDir=C:\Documents
Sub Macro1()
'
'
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=MS Access Database;DBQ=C:\Documents and Settings\Administrator\My Documents\test_db.mdb;DefaultDir=C:\Documents and Setting" _
), Array( _
"s\Administrator\My Documents;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;" _
)), Destination:=Range("A1"))
.CommandText = Array( _
"SELECT Table1.ID, Table1.name, Table1.id, Table1.var1, Table1.var2" & Chr(13) & "" & Chr(10) & "FROM `C:\Documents and Settings\Administrator\My Documents\test_db`.Table1 Table1" _
)
.Name = "Query from MS Access Database"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertEntireRows
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub
MS Access表1
name id var1 var2
joe 1 23 34
当我运行宏一次时,我进入Excel
name id var1 var2
joe 1 23 34
name id var1 var2 name id var1 var2
joe 1 23 34 joe 1 23 34
当我再次运行宏时,我进入Excel
name id var1 var2
joe 1 23 34
name id var1 var2 name id var1 var2
joe 1 23 34 joe 1 23 34
而不是
name id var1 var2
joe 1 23 34
name id var1 var2
joe 1 23 34
您知道要将MS Access行作为现有数据下方的新行数据导入Excel,应该更改什么吗?更改
)), Destination:=Range("A1"))
说些不同的话。或许
)), Destination:= Range("A65536").End(xlUp).offset(1,0)
根据导入数据的方式,您可能需要做更多的工作。Enderland的回答在一个查询表中对我来说非常有用,我将一个月的文本文件导入excel,并将它们附加到彼此的末尾。部分代码如下所示。目标工作簿的第二页包含日期=文件名。我现在意识到我可以向用户询问月份和年份,并通过循环生成文件名。除6月、4月、9月、11月30日和2月28日/29日外,其余均为31岁。我会的 将sDate设置为字符串 将sDataPath设置为字符串 作为整数的Dim i 作为整数的Dim mMax Dim Label_F_名称作为字符串 Dim F_名称作为字符串 sDataPath=工作表(“D&L”).单元格(1,“G”).值位于工作簿第二页 mMax=工作表(“D&L”)。单元格(1,“D”)。值位于工作簿第二页 对于i=1到mMax sDate=“A_”+CStr(工作表(“D&L”)。单元格(1+i,“A”)。值)+“.csv””循环浏览工作表中的日期列表 '使用文件名标记数据列,以便验证数据是否来自正确的文件 标签名称=sDate+“…………” F_name=sDataPath+sDate 范围(“'D&L'!D5”)=F_名称
下一个i是否允许一次只插入一行?我之所以问这个问题,是因为我看到偏移量为1——如果是的话,那将是一个问题,因为有时我可能需要插入未知数量的行。不,这将获取数据在A65536上方的第一个单元格(可能是导入数据的最后一行),并在其下方移动一行。