我正在尝试自动执行以下操作:
我在目录中有150个文本文件,我想打开该目录,复制所有内容并粘贴到excel工作表中,其偏移量为'c'
每个文件正好有95行,因此例如在将C:\myDir\MyFile1
粘贴到A1中之后。我想将下一个.txt文件的内容粘贴到A101中。
到目前为止,我已经整理了一些代码:
Sub LoopThroughFiles()
Dim wb As Workbook
Dim ws As Worksheet
Dim StrFile As String
Dim C as integer
StrFile = Dir("E:\my path")
Do While Len(StrFile) > 0
Workbooks.Open(StrFile)
Workbook.Sheets(1).Cells.Copy ws.range("A"& c)
Workbook.Close
C = C + 100 'Each txt file = 95 rows
StrFile = Dir
Loop
End Sub
尽管这并没有遍历列表。
答案 0 :(得分:0)
您应该调查使用Excel的“ Power Query”加载项(在Excel 2016中默认情况下在产品中)。 使用Power Query,您可以简单地选择文件所在的文件夹,并非常容易地附加所有数据,而无需进行编码。您也可以在Power Query编辑器中根据需要修改数据。
答案 1 :(得分:0)
只需为工作簿添加一个变量,其中包含工作簿csvWb
并串联folder
(以防excel文件不在文件夹中)。此外,Excel不喜欢复制在目标中重叠的多个整张工作表,因此让我们将自己限制为Rows("1:95")
(这样可以节省内存和时间)。故意省略任何错误处理(文件可能被锁定),以使示例简短。
Sub LoopThroughFiles()
Dim wb As Workbook
Dim ws As Worksheet
Dim StrFile As String
Dim C As Integer
Dim csvWb As Workbook
Dim folder As String
folder = "E:\my path\"
StrFile = Dir(folder)
Set ws = ThisWorkbook.ActiveSheet
C = 1
Do While Len(StrFile) > 0
Set csvWb = Workbooks.Open(folder & StrFile)
csvWb.Sheets(1).Rows("1:95").Copy ws.Range("A" & C) 'Each txt file = 95 rows
csvWb.Close
C = C + 100 'Each txt file = 95 rows
StrFile = Dir
Loop
End Sub