我想多個文本文件導入到單元格A1,A2,A3等 這意味着文本文件1將前往A1 文本文件2應該去A2 文本文件3應該去A3使用VBA將多個文本文件導入Excel中的1個單元格和新行?
在stackoverflow我發現code看起來幾乎像我想要做的除了創建新的列。
問題是文件中的文本字符串被分隔並放在新列中,因爲這是代碼的目的(使用答案中給出的替代方法)。
我不知道該代碼中要更改文件1的所有文本在單元格A1中。 我希望這是可能的,如果不是我欣賞任何關於其他解決方案的想法。
我想多個文本文件導入到單元格A1,A2,A3等 這意味着文本文件1將前往A1 文本文件2應該去A2 文本文件3應該去A3使用VBA將多個文本文件導入Excel中的1個單元格和新行?
在stackoverflow我發現code看起來幾乎像我想要做的除了創建新的列。
問題是文件中的文本字符串被分隔並放在新列中,因爲這是代碼的目的(使用答案中給出的替代方法)。
我不知道該代碼中要更改文件1的所有文本在單元格A1中。 我希望這是可能的,如果不是我欣賞任何關於其他解決方案的想法。
如果您希望放入一個單細胞的每個文件的全部內容,代碼如下適應你提到可能會工作:
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個字符)。
註釋掉的代碼應該這樣做,因爲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
感謝您的幫助Miqi180!我嘗試了代碼,它的作用部分是因爲它不會將文件的所有文本複製到單個單元格,而只是文本的第一行。儘管如此,你的代碼顯示它是可能的(我有些疑惑)。 –
你的代碼實際上完成了YowE3K的工作!我很驚訝你解決它有多快。此外,你對最大字符的評論也很有幫助。我注意到代碼給出了一個執行「.Cells(thisRow,1).Value = strInput」行的錯誤。原因似乎是達到了一個單元格中字符的限制。非常感謝您的大力幫助! –
@bbgreen - 如果你的文件大小大於32Kb,你可以通過說'.Cells(thisRow,1).Value = Left(strInput,32767)'來限制單元格的值到第一個32Kb - 這取決於你是否可以承擔「損失」文件的其餘部分或不。 – YowE3K
感謝您加入32Kb自適應YowE3K。您的建議有助於避免由超過32 Kb限制引發的錯誤消息。我希望在未來版本的Excel中解除這個限制。現在的代碼沒有任何錯誤信息! –