将多个文本文件导入excel的VBA代码?

时间:2015-07-16 19:22:56

标签: excel vba excel-vba

似乎这个问题已经在互联网上以某种形式被提出过很多次,但是我无法提出满足我需求的代码。我不想说我对VBA一点都不懂;我在一个文件夹中有10-15个文本文件,可能包含也可能不包含数据。如果是这样,第一行将是一个标题,其下面的所有行包含4条信息(数字,描述,数量和单位)。一切都用逗号描述。我需要将这些数据放在excel中特定工作表的4列中,最好不要复制任何标题。理想情况下,这将能够刷新(或在导入新数据时删除当前数据),因此txt文件中的更改将反映在工作表上。我需要传递一组文件供其他人使用,因此文本文件的路径应该是相对的。

此代码是我在搜索中找到的最佳代码:

Sub Read_Text_Files()
Dim sPath As String, sLine As String
Dim oPath As Object, oFile As Object, oFSO As Object
Dim r As Long
'
'Files location
sPath = ThisWorkbook.path & "\Quantities\"
'
r = 1
Set oFSO = CreateObject( _
"Scripting.FileSystemObject")
Set oPath = oFSO.GetFolder(sPath)
Application.ScreenUpdating = False
For Each oFile In oPath.Files
If LCase(Right(oFile.Name, 4)) = ".txt" Then
'
Open oFile For Input As #1 ' Open file for input.
Do While Not EOF(1) ' Loop until end of file.
Input #1, sLine ' Read data
If Left(sLine, 1) = "=" Then sLine = "'" & sLine 'If line starts with an equal sign, add a single quote at the start
sLine = Replace(sLine, Chr(2), "") 'Strip funky characters
sLine = Replace(sLine, Chr(3), "")
sLine = Replace(sLine, Chr(10), "")
Range("A" & r).Formula = sLine ' Write data line
r = r + 1
Loop
Close #1 ' Close file.
'
End If
Next oFile
'
'Text to Columns
Range("A1", Range("A" & Cells.Rows.Count).End(xlUp)).Select
Selection.TextToColumns DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False
Application.ScreenUpdating = True
End Sub

此时我试图修补它十几次但收效甚微。我的最好的试验让它运行正常,虽然每个单独的值都在A列。此时,我已经把它弄乱了它没有运行的地方。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

使用Line Input #1, sLine。这会占用整个文本行,而不是一次一个单词。

尽量避免选择要操作的内容。相反,直接对它们进行操作。将基于选择的代码重写为以下代码:

Range("A1", Range("A" & UsedRange.Rows.Count).End(xlUp)).TextToColumns DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
    Semicolon:=False, Comma:=True, Space:=False, Other:=False

此外,您不需要在行之间引用。