2013-08-22 82 views
3

我想使用VBA將文本文件中的內容複製到Excel單元格中。我可以從大多數文本文件成功做到這一點。但是在某些文件的情況下,代碼只將部分數據複製到excel文件中。使用VBA將文本文件複製到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納什維爾68800 AZ | | 5150 CTY RD 525 Raleigh 64292 | 18000000 0412CL0 1 N 2

當我使用上述文本文件時,我得到了以下輸出。

FWI 3F5A 041 g1ksIpqub7J MCMILLAN J. PIIKKILA [email protected] +001 061 477 130°F g3ktHqrwc9 CLE g1ksIpqub7 CLEHS04C!|!P.O。 BOX 171 SEARSPORT

2)文本文件,其內容包含在單個單元格A1

FSJ!3U68!071!gQloo3d5OGG普雷斯利Y.餡餅JR [email protected] +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普雷斯利Y.餡餅JR [email protected] +001 047 475273中號gQmqq6d8ME CVE gQloo3d5OG CVEGF07C!|!10001 SW 125 CT RD裏諾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) 
+0

部分數據在哪停止?請包括失敗的輸出,以及您嘗試(如果有的話)來調試它(例如,更改它凍結的字符,確保沒有隱藏的ascii字符等)。 – jmac

+0

@jmac我更新了問題以包含我得到的輸出。我提到很多網站,都說只是複製單元格A1的內容以獲取整個文本文件在Excel中。對於大約50個文件,這看起來不錯,但對於其他3個文件則沒有。 – Foreever

+0

如果您將此問題(對於破損的條目)的文本複製粘貼迴文本文件,您能否看到它是否有效?我不知道文本文件是如何生成的,但是文件中可能存在隱藏的字符而導致麻煩,或者以其他方式破壞文件。複製純文本可能會使其工作(或至少消除一個可能的原因)。 – jmac

回答

5

問題:

您沒有使用正確的方法來讀取*.txt文件中VBA。使用Workbooks.Open()打開文件將打開的文件視爲*.csv。因此,當Excel正在讀取流併發生逗號時,會將其視爲新行分隔符,並將其餘部分(逗號後的)引發到下一個單元格。作爲MSDN Workbooks.Open Method

表達。開(文件名...)

表達一個表示工作簿對象的變量說明。

顯然,Workbook object不是txt文件。


解決方法:

正確的方法來讀取一個文件*.txt內容是使用FileSystemObjectTextStream對象從Microsoft 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 
+0

這很好。多謝你。 – Foreever

+0

@但很高興我能幫上忙。這裏在stackoverflow上,我們表示感謝你通過upvoting和接受答案(*綠色複選標記左上角的答案*)。 – 2013-08-22 07:33:26

+0

爲什麼這些字符在每個複製文本之前都是'??'? – Foreever

相關問題