2014-11-03 42 views
0

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

然而,每当我再添它只是忽略第一个txt文件,我可以导入一个TXT与

ActiveSheet.QueryTables.Add(Connection:= _ 

容易文件。

非常感谢

+0

基本上它不会忽视它。它只是以某种方式覆盖与新建立的第一个连接。所以最后的文本文件是唯一反映在文件中的文件。您可以将其加载到不同的工作表或使用ADO。 – L42 2014-11-04 03:38:24

回答

0

是否忽略第一个文本文件或它覆盖它,如果ActiveSheet不会改变?

您可以在.Add方法之前明确指定工作表,或者如果您希望在同一工作表上导入两个工作表,则会有一个Destination:=参数,它允许您指定一个起始范围。可以参考here

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文件作为示例。调整以适应。
您可以选择尽可能多的文件,但仅处理前两个文件。
如果你需要处理更多,你必须循环选定的文件。 HTH

相关问题