无法使用VBA将文本文件复制到Excel中

时间:2013-08-22 06:34:41

标签: excel debugging excel-vba copy text-files vba

我想使用VBA将文本文件中的内容复制到Excel单元格。我可以从大多数文本文件中成功完成此操作。但是在某些文件的情况下,代码只将部分数据复制到excel文件中。

这是我用于复制的代码

FileName = folderpath & sFile
Set mytextfile = Workbooks.Open(FileName)
mytextfile.Sheets(1).Cells.CurrentRegion.Copy ThisWorkbook.Sheets("RawData").Range("A" & inputRow)
'mytextfile.Sheets(1).Range("A1").CurrentRegion.Copy ThisWorkbook.Sheets("RawData").Range("A" & inputRow)
mytextfile.Close (False)

我已经明白问题是什么了。在将某些文本文件作为excel文件打开时,一些内容存在于单元格A1中,其余内容存在于单元格A2中。

我不知道为什么会这样打开。我发布了以下两个文本文件的内容:

1)在excel中打开时,其内容包含在不同单元格中的文本文件

  

fwi!3F5A!041!g1ksIpqub7J MCMILLAN J. PIIKKILA RAYMONDBERRY@WEBTV.NET   +001 061 477 130 F g3ktHqrwc9 CLE!g1ksIpqub7 CLEHS04C | P.O. BOX 171 SEARSPORT,ME Nashville 68800 AZ | | 5150 CTY RD 525 Raleigh 64292 |   18000000 0412CL0 1 N 2

当我使用上面的文本文件时,我得到了以下输出。

  

fwi!3F5A!041!g1ksIpqub7J MCMILLAN J. PIIKKILA RAYMONDBERRY@WEBTV.NET +001 061 477 130 F g3ktHqrwc9 CLE!g1ksIpqub7 CLEHS04C | P.O。方框171 SEARSPORT

2)文本文件,其内容包含在单个单元格A1

  

fSj!3U68!071!gQloo3d5OGG Presley Y. TART JR PULPACTION82@HOIMAIL.COM   +001 047 475273 M gQmqq6d8ME CVE!gQloo3d5OG CVEGF07C | 10001 SW 125TH CT RD Reno 88595 TN | | 10849 DEBORAH DRIVE Glendale 70958 | 97400000   0712CV0 0 N 0

当我使用上面的文本文件时,我得到了以下输出。

  

fSj!3U68!071!gQloo3d5OGG Presley Y. TART JR PULPACTION82@HOIMAIL.COM +001 047 475273 M gQmqq6d8ME CVE!gQloo3d5OG CVEGF07C | 10001 SW 125TH CT RD Reno 88595 TN | | 10849 DEBORAH DRIVE Glendale 70958 | 97400000 0712CV0 0 N 0

这两个文件的内容没有明显的区别。

我也试过这段代码但没有任何成功:

FileName = folderpath & sFile
Set mytextfile = Workbooks.Open(FileName)
mytextfile.Sheets(1).Range("A1").CurrentRegion.Copy ThisWorkbook.Sheets("RawData").Range("A" & inputRow)
mytextfile.Close (False)

1 个答案:

答案 0 :(得分:5)

问题:

您没有使用正确的方法来读取VBA中的*.txt文件。使用Workbooks.Open()打开文件会将打开的文件视为*.csv。因此,当Excel正在读取流并且发生逗号时,它会将其视为新行分隔符,并将剩余部分(在逗号之后)抛出到下一个单元格。如MSDN Workbooks.Open Method

所述
  

表达式。打开(FileName ...)

     

表达式表示工作簿对象的变量。

显然,Workbook object不是txt文件。


解决方案:

阅读*.txt文件内容的正确方法是使用FileSystemObject库中的TextStreamMicrosoft Scripting Runtime个对象。

我为你写了一个简单的Sub,它读取了*.txt文件的全部内容。为了使其工作,您必须添加对项目的引用

在VBE窗口中,点击Tools»References»向下滚动,查找并勾选 Microsoft Scripting Runtime

现在,浏览以下代码并修改*.txt文件的路径或通过参数传递路径,*.txt文件的全部内容将放在第一张工作表 Sheet(1) 单元格A1

Sub ReadTxtFile()

    Dim oFSO As New FileSystemObject
    Dim oFS As TextStream

    Dim fileName As String
    ' make sure to update your path or
    ' pass it to the sub through parameter
    fileName = "C:\Users\fooboo\Desktop\text.txt"

    Set oFS = oFSO.OpenTextFile(fileName)

    Dim content As String
    content = oFS.ReadAll

    With Sheets(1).Range("A1")
        .ClearContents
        .NumberFormat = "@"
        .Value = content
    End With

    oFS.Close
    Set oFS = Nothing
    Set oFSO = Nothing
End Sub