Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从多个工作簿复制特定数据_Excel_Vba_Consolidation - Fatal编程技术网

Excel 从多个工作簿复制特定数据

Excel 从多个工作簿复制特定数据,excel,vba,consolidation,Excel,Vba,Consolidation,我是VBA新手,我一直在尝试创建一个程序来复制特定范围的数据,从多个工作手册的第2页到主工作簿的第2页 复制条件:列范围将为A20到AS20,而行范围将取决于在列R中具有数据的最后一个单元格。 粘贴条件:从第A20行开始,连续粘贴所有复制的单元格,中间有一个空行 复制粘贴条件:从源书到母版页的范围D5:D18,重叠,因为所有源书的范围都相同。 我一直到下一阶段才来,但没有进一步的想法。做了一些修改,但效果不好 进展: 看看这个。请参阅代码中的注释,如果有问题,请输入注释以回答。希望你能找到新的东

我是VBA新手,我一直在尝试创建一个程序来复制特定范围的数据,从多个工作手册的第2页到主工作簿的第2页

复制条件:列范围将为A20到AS20,而行范围将取决于在列R中具有数据的最后一个单元格。

粘贴条件:从第A20行开始,连续粘贴所有复制的单元格,中间有一个空行

复制粘贴条件:从源书到母版页的范围D5:D18,重叠,因为所有源书的范围都相同。

我一直到下一阶段才来,但没有进一步的想法。做了一些修改,但效果不好

进展:


看看这个。请参阅代码中的注释,如果有问题,请输入注释以回答。希望你能找到新的东西。您必须将此代码放入主工作簿中的模块中

Sub copyDataFromMultipleWorkbooksIntoMaster()

Dim FileItem As Object
Dim oFolder As Object
Dim FSO As Object
Dim BrowseFolder As String

Dim masterBook As Workbook
Dim sourceBook As Workbook

Dim insertRow As Long
Dim copyRow As Long

' add variables for blank check
Dim checkRange As Range, r As Range

insertRow = 20
Set masterBook = ThisWorkbook

Set FSO = CreateObject("Scripting.FileSystemObject")

        With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Select the folder with source files"
        If Not .Show = 0 Then
            BrowseFolder = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With

    Application.ScreenUpdating = False


    Set oFolder = FSO.getfolder(BrowseFolder)

    masterBook.Sheets("Service Order Template").Cells.UnMerge


    For Each FileItem In oFolder.Files

       If FileItem.Name Like "*.xls*" Then

        Workbooks.Open (BrowseFolder & Application.PathSeparator & FileItem.Name)

       Set sourceBook = Workbooks(FileItem.Name)

           With sourceBook.Sheets("Service Order Template")
               .Cells.UnMerge
               copyRow = .Cells(Rows.Count, 18).End(xlUp).Row
               Range(.Cells(20, 1), .Cells(copyRow, 45)).Copy Destination:=masterBook.Sheets("Service Order Template").Cells(insertRow, 1)

               ' copy additional needed range D5 : D18 from source to range D5 on master
               Range(.Cells(5, 4), .Cells(18, 4)).Copy Destination:=masterBook.Sheets("Service Order Template").Cells(5, 4)

               Application.CutCopyMode = False
               .Parent.Close SaveChanges:=False
          End With     
        masterBook.Sheets("Service Order Template").insertRow = .Cells(Rows.Count, 18).End(xlUp).Row + 2
       End If
    Next

    With masterBook.Sheets("Service Order Template")
        ' if you don't need to highlight the whole row - remove the ".EntireRow" part →---→---→----↓
        Range(.Cells(20, 18), .Cells(Rows.Count, 18).End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Interior.Color = vbYellow
    End With

    Application.ScreenUpdating = True
End Sub

看看这个。请参阅代码中的注释,如果有问题,请输入注释以回答。希望你能找到新的东西。您必须将此代码放入主工作簿中的模块中

Sub copyDataFromMultipleWorkbooksIntoMaster()

Dim FileItem As Object
Dim oFolder As Object
Dim FSO As Object
Dim BrowseFolder As String

Dim masterBook As Workbook
Dim sourceBook As Workbook

Dim insertRow As Long
Dim copyRow As Long

' add variables for blank check
Dim checkRange As Range, r As Range

insertRow = 20
Set masterBook = ThisWorkbook

Set FSO = CreateObject("Scripting.FileSystemObject")

        With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Select the folder with source files"
        If Not .Show = 0 Then
            BrowseFolder = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With

    Application.ScreenUpdating = False


    Set oFolder = FSO.getfolder(BrowseFolder)

    masterBook.Sheets("Service Order Template").Cells.UnMerge


    For Each FileItem In oFolder.Files

       If FileItem.Name Like "*.xls*" Then

        Workbooks.Open (BrowseFolder & Application.PathSeparator & FileItem.Name)

       Set sourceBook = Workbooks(FileItem.Name)

           With sourceBook.Sheets("Service Order Template")
               .Cells.UnMerge
               copyRow = .Cells(Rows.Count, 18).End(xlUp).Row
               Range(.Cells(20, 1), .Cells(copyRow, 45)).Copy Destination:=masterBook.Sheets("Service Order Template").Cells(insertRow, 1)

               ' copy additional needed range D5 : D18 from source to range D5 on master
               Range(.Cells(5, 4), .Cells(18, 4)).Copy Destination:=masterBook.Sheets("Service Order Template").Cells(5, 4)

               Application.CutCopyMode = False
               .Parent.Close SaveChanges:=False
          End With     
        masterBook.Sheets("Service Order Template").insertRow = .Cells(Rows.Count, 18).End(xlUp).Row + 2
       End If
    Next

    With masterBook.Sheets("Service Order Template")
        ' if you don't need to highlight the whole row - remove the ".EntireRow" part →---→---→----↓
        Range(.Cells(20, 18), .Cells(Rows.Count, 18).End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Interior.Color = vbYellow
    End With

    Application.ScreenUpdating = True
End Sub

----Set sourceBook=Workbooks.Open(FileItem.Name)'开源书----抛出错误。这里到底应该做些什么?上面说文件被移动、重命名或删除了。我编辑了代码,错过了,抱歉。应该有
Set sourceBook=Workbooks.Open(BrowseFolder&Application.PathSeparator&FileItem.Name)
要指定文件的完整路径,请重试。请注意,我已经测试了代码,它工作正常。查看线程以了解可能的原因,因为代码是正确的。我收到一个错误,“我们无法对合并的单元格执行此操作”。。。这是我以前遇到的错误之一…我已经解决了。。。你能帮我解释一下我的最新评论吗…----Set sourceBook=Workbooks.Open(FileItem.Name)'opensourcebook----抛出错误。这里到底应该做些什么?上面说文件被移动、重命名或删除了。我编辑了代码,错过了,抱歉。应该有
Set sourceBook=Workbooks.Open(BrowseFolder&Application.PathSeparator&FileItem.Name)
要指定文件的完整路径,请重试。请注意,我已经测试了代码,它工作正常。查看线程以了解可能的原因,因为代码是正确的。我收到一个错误,“我们无法对合并的单元格执行此操作”。。。这是我以前遇到的错误之一…我已经解决了。。。你能帮我说说我最近的评论吗。。。