-1

我需要将 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

当我再次运行宏时,我进入 Excel

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 吗?

4

2 回答 2

1

改变

)), Destination:=Range("A1"))

说点不一样的。也许

)), Destination:= Range("A65536").End(xlUp).offset(1,0)

根据您导入数据的方式,您可能需要做更多的事情。

于 2012-08-17T02:13:16.573 回答
0

Enderland 的答案在我将一个月的文本文件导入 excel 并将它们附加到彼此末尾的查询表中非常适合我。部分代码如下所示。目标工作簿的第二张表中包含 dates=filenames。我现在意识到我可以向用户询问月份和年份,并使用循环生成文件名。除 6 月、4 月、9 月、11 月 =30 和 2 月 = 28/29 外,其他所有人都是 31。我去做。

Dim sDate As String Dim sDataPath As String Dim i As Integer Dim mMax As Integer Dim Label_F_Name As String Dim F_name As String

sDataPath = Worksheets("D&L").Cells(1, "G").Value '值位于工作簿的第二张表中 mMax = Worksheets("D&L").Cells(1, "D").Value '值位于工作簿第二张

For i = 1 To mMax sDate = "A_" + CStr(Worksheets("D&L").Cells(1 + i, "A").Value) + ".csv" ' 遍历工作表中的日期列表

'用文件名标记数据列,以便验证数据来自正确的文件 Label_F_Name = sDate + "........" F_name = sDataPath + sDate Range("'D&L'!D5") = F_name

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" + F_name, Destination:=Range("H1048576").End(xlUp).Offset(4, 0)) ' offset for existing header
    .Name = Label_F_Name
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertEntireRows ' appends data to end of previous
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = False
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 437
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileCommaDelimiter = True
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

接下来我

于 2013-09-17T16:45:47.927 回答