使用VBA和Excel从文件夹中的文件收集数据

时间:2015-01-23 11:58:23

标签: excel vba excel-vba

我对VBA和宏很新,所以我在这里写一篇文章,希望能为我的解决方案提供一些帮助和提示。我的问题如下:

我需要复制包含文件夹和子文件夹中excel文件数据的不确定数量的单元格以粘贴到excel-“mother”文件中:

“包含数据的所有文件都在一个文件夹中,它是子文件夹。要在theese文件中复制的单元格总是从第40行开始,并且在单元格A,B,C和D中。有多少行需要被复制但是不确定。“

我正在寻找的是遍历文件夹的代码,它的子文件夹正在查找从中获取数据的文件。我也在想,在这个循环中,我稍后会编写代码来收集每个文件中的数据。

所以,我正在寻找的是: - 循环访问文件夹和子文件夹以从文件中收集数据的代码。 - 查找包含数据的最后一行的代码,并将所有数据从开始复制到最后一行。我想的是:“A40:D& UncertainRange”

所有帮助都非常感谢..毕竟我还是VBA Noob。 祝周末愉快,并且可以通过脚本解决所有问题。

美好的一天。

2 个答案:

答案 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