使用VBA将文本文件复制到Excel时出错

我想使用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 | PO 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 | PO BOX 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 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 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) 

问题:

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

expression式.Open(FileName …)

expression式表示Workbooks对象的variables

显然,一个Workbook object不是一个txt文件。


解:

读取*.txt文件内容的正确方法是使用Microsoft Scripting Runtime Library中的FileSystemObjectTextStream对象。

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

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

现在,通过下面的代码进行屏幕显示并修改*.txt文件的path或者通过parameter passingpath, *.txt文件的全部内容将被放置在第一张Sheet(1) Cell 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