我对VBA和宏很新,所以我在这里写一篇文章,希望能为我的解决方案提供一些帮助和提示。我的问题如下:
我需要复制包含文件夹和子文件夹中excel文件数据的不确定数量的单元格以粘贴到excel-“mother”文件中:
“包含数据的所有文件都在一个文件夹中,它是子文件夹。要在theese文件中复制的单元格总是从第40行开始,并且在单元格A,B,C和D中。有多少行需要被复制但是不确定。“
我正在寻找的是遍历文件夹的代码,它的子文件夹正在查找从中获取数据的文件。我也在想,在这个循环中,我稍后会编写代码来收集每个文件中的数据。
所以,我正在寻找的是: - 循环访问文件夹和子文件夹以从文件中收集数据的代码。 - 查找包含数据的最后一行的代码,并将所有数据从开始复制到最后一行。我想的是:“A40:D& UncertainRange”
所有帮助都非常感谢..毕竟我还是VBA Noob。 祝周末愉快,并且可以通过脚本解决所有问题。
美好的一天。
答案 0 :(得分:1)
查看以下链接:http://online-vba.de/vba_readfolder.php - 将sRootPath
更改为最终没有\
的目录
答案 1 :(得分:1)
这是一个命令,用于标识Excel工作表中包含数据的最后一行:
lastRow = ActiveWorkbook.ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
要遍历从每个文件的第40行开始的数据,您可以使用以下内容:
lastRow = ActiveWorkbook.ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
For iRow = 40 to lastRow
destinationSheet.Cells(outputRow, 1) = sourceSheet.Cells(iRow, 1)
destinationSheet.Cells(outputRow, 2) = sourceSheet.Cells(iRow, 2)
destinationSheet.Cells(outputRow, 3) = sourceSheet.Cells(iRow, 3)
destinationSheet.Cells(outputRow, 4) = sourceSheet.Cells(iRow, 4)
outputRow = outputRow + 1
Next iRow
要循环浏览文件,请使用以下内容:
Sub mySub()
Dim strFolder As String
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\"
.title = "Please select a folder..."
.Show
If .SelectedItems.Count > 0 Then
strFolder = .SelectedItems(1) & "\"
Else
Exit Sub
End If
End With
Dim myobject As Object
Set myobject = CreateObject("Scripting.FileSystemObject")
Set mysource = myobject.GetFolder(strFolder)
Application.Workbooks.Open ("c:\motherWorkbook.xlsx")
For Each MyFile In mysource.Files
''' Do Something with files in main folder
Next
' Subfolders
For Each mySubFolder In mysource.Subfolders
Set mysource = myobject.GetFolder(mySubFolder.Path)
For Each MyFile In mysource.Files
''' Do Something with files in sub folders
Next
Next
End Sub