VBA在同一工作簿中导入两个txt文件
问题描述:
有没有办法在同一个工作簿中导入两个txt文件?VBA在同一工作簿中导入两个txt文件
然而,每当我再添它只是忽略第一个txt文件,我可以导入一个TXT与
ActiveSheet.QueryTables.Add(Connection:= _
容易文件。
非常感谢
答
是否忽略第一个文本文件或它覆盖它,如果ActiveSheet不会改变?
您可以在.Add方法之前明确指定工作表,或者如果您希望在同一工作表上导入两个工作表,则会有一个Destination:=参数,它允许您指定一个起始范围。可以参考here。
答
如果要在同一张表中同时加载文本文件,则可以尝试使用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
基本上它不会忽视它。它只是以某种方式覆盖与新建立的第一个连接。所以最后的文本文件是唯一反映在文件中的文件。您可以将其加载到不同的工作表或使用ADO。 – L42 2014-11-04 03:38:24