Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将MS Access数据作为现有数据下方的新行插入Excel_Vba_Ms Access_Excel - Fatal编程技术网

Vba 将MS Access数据作为现有数据下方的新行插入Excel

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

我需要将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 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上方的第一个单元格(可能是导入数据的最后一行),并在其下方移动一行。