2016-09-04 19 views
0

我想多個文本文件導入到單元格A1,A2,A3等 這意味着文本文件1將前往A1 文本文件2應該去A2 文本文件3應該去A3使用VBA將多個文本文件導入Excel中的1個單元格和新行?

在stackoverflow我發現code看起來幾乎像我想要做的除了創建新的列。

問題是文件中的文本字符串被分隔並放在新列中,因爲這是代碼的目的(使用答案中給出的替代方法)。

我不知道該代碼中要更改文件1的所有文本在單元格A1中。 我希望這是可能的,如果不是我欣賞任何關於其他解決方案的想法。

回答

0

如果您希望放入一個單細胞的每個文件的全部內容,代碼如下適應你提到可能會工作:

Sub Import_All_Text_Files() 

    Application.ScreenUpdating = False 

    Dim thisRow As Long 
    Dim fileNum As Integer 
    Dim strInput As String 

    Const strPath As String = "C:\Temp\Temp\" 'Change as required 
    Dim strFilename As String 

    strFilename = Dir(strPath & "*.txt") 

    With ActiveSheet 
     thisRow = .Range("A" & .Rows.Count).End(xlUp).Row 

     Do While strFilename <> "" 

      fileNum = FreeFile() 
      Open strPath & strFilename For Binary As #fileNum 
      strInput = Space$(LOF(fileNum)) 
      Get #fileNum, , strInput 
      Close #fileNum 

      thisRow = thisRow + 1 
      .Cells(thisRow, 1).Value = strInput 

      strFilename = Dir 
     Loop 
    End With 

    Application.ScreenUpdating = True 

End Sub 

我不瓜爾如果文件大小過大,它會起作用--Excel限制了可以將多少個字符插入到任何一個單元格中(如果我沒有記錯的話,則爲32,767個字符)。

+0

你的代碼實際上完成了YowE3K的工作!我很驚訝你解決它有多快。此外,你對最大字符的評論也很有幫助。我注意到代碼給出了一個執行「.Cells(thisRow,1).Value = strInput」行的錯誤。原因似乎是達到了一個單元格中字符的限制。非常感謝您的大力幫助! –

+0

@bbgreen - 如果你的文件大小大於32Kb,你可以通過說'.Cells(thisRow,1).Value = Left(strInput,32767)'來限制單元格的值到第一個32Kb - 這取決於你是否可以承擔「損失」文件的其餘部分或不。 – YowE3K

+0

感謝您加入32Kb自適應YowE3K。您的建議有助於避免由超過32 Kb限制引發的錯誤消息。我希望在未來版本的Excel中解除這個限制。現在的代碼沒有任何錯誤信息! –

0

註釋掉的代碼應該這樣做,因爲curCol設置爲1以下行(即A列):

curCol = curCol + 1 

我也想指出你鏈接到是相當低效的代碼,因爲在每次迭代之前不需要測量底部行。這真的應該簡單地增加行數,而不是一個變量被改寫,以這樣的:

nxt_row = nxt_row +1 
ActiveSheet.Cells(nxt_row, curCol) = DataLine 

及以下幾行代碼應該被移到子程序的開頭:

if Range("A1").Value = "" then 
    nxt_row = 1 
else 
    if Range("A2").Value = "" then 
    nxt_row = 2 
    else 
    nxt_row = Range("A1").End(xlDown).Offset(1).Row 
    end if 
end if 
+0

感謝您的幫助Miqi180!我嘗試了代碼,它的作用部分是因爲它不會將文件的所有文本複製到單個單元格,而只是文本的第一行。儘管如此,你的代碼顯示它是可能的(我有些疑惑)。 –

相關問題