VBA在同一工作簿中导入两个文本文件

时间:2014-11-03 21:06:22

标签: excel vba

有没有办法在同一个工作簿中导入两个txt文件?

我可以使用

轻松导入一个txt文件
ActiveSheet.QueryTables.Add(Connection:= _

但是每当我添加另一个时,它就会忽略第一个txt文件。

非常感谢

2 个答案:

答案 0 :(得分:0)

是否忽略第一个文本文件,或者如果ActiveSheet没有更改,它是否会覆盖它?

您可以在.Add方法之前明确指定工作表,或者,如果您希望在同一工作表上同时进行两次导入,则可以使用Destination:=参数来指定起始范围。可以找到参考here

答案 1 :(得分:0)

如果要在同一张纸中加载文本文件,可以尝试使用ADO。
类似的东西:

Sub conscious()
    Dim con As ADODB.Connection, rec As ADODB.Recordset
    Set con = New ADODB.Connection: Set rec = New ADODB.Recordset

    Dim datasource As String, txtfiles As Variant _
        , txt1 As String, txt2 As String
    txtfiles = Application.GetOpenFilename(FileFilter:="CSV Files, *.csv", _
        MultiSelect:=True)
    datasource = Left(txtfiles(1), InStrRev(txtfiles(1), "\"))
    txt1 = "[" & Dir(txtfiles(1)) & "]"
    txt2 = "[" & Dir(txtfiles(2)) & "]"

    Dim sconnect As String
    sconnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & datasource & _
                ";Extended Properties=""Text;HDR=YES;FMT=Delimited(,)"";"
    con.Open sconnect

    Dim sqlstr As String
    sqlstr = "SELECT * FROM " & txt1 & _
            "UNION ALL SELECT * FROM " & txt2
    rec.Open sqlstr, con, adOpenStatic, adLockReadOnly

    With Sheets("Sheet1")
        Dim lrow As Long
        lrow = .Range("A" & .Rows.Count).End(xlUp).Row
        If lrow > 1 Then .Range("A2:J" & lrow).ClearContents
        .Range("A2").CopyFromRecordset rec
    End With
    Application.ScreenUpdating = True

    rec.Close: con.Close
    Set rec = Nothing: Set con = Nothing
End Sub

基本上这会提示您选择文件 我使用 CSV 文件作为示例。调整以适应。
您可以选择尽可能多的文件,但这只处理前2个文件 如果您需要处理更多内容,则必须遍历所选文件。 HTH