宏将不同文件中的工作表复制到单个文件中

时间:2017-12-12 12:45:10

标签: excel vba excel-vba

我目前为我的团队中的每个人都有一个工作簿,他们有一个名为"Panel"的工作表,其中包含他们的计划和进度。 我想开发一个统一的电子表格,其中包含所有他们的举措,以便了解整个区域。

在每个"Panel"工作表中,"U5"单元格包含所有者的名称。在我的合并文件中,我想将所有者的名称作为相应表单的名称。

我制作了这个宏,从一个单独的文件夹中获取所有"Panel"张,将它们放在主文件中并重命名以识别所有者。

稍后,我将开发一个包含这些计划的数据库,识别数据字段的开头和结尾,以便以单一方式为仪表板编译它们。

这是我的代码:

Sub GetSheets()
    Path = "C:\Users\Admin\Desktop\PMO\Test consolidation\Independent files"
    Filename = Dir(Path & "*.xlsm")

    Dim wsname As String

    Do While Filename <> ""
        Workbooks.Open Filename:=Path & Filename, ReadOnly:=True

        Worksheets("Panel").Activate
        Sheet.Copy After:=ThisWorkbook.Sheets(1)
        Worksheets("Panel").Select
        wsname = Range("U5")
        Worksheets("Panel").Name = wsname

        Workbooks(Filename).Close
        Filename = Dir()
    Loop
End Sub

你能帮忙找出为什么这不起作用吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个检查路径是否存在\,是否存在工作表(代码为la Rory)以及U5是否为空的示例。假设,您正在打开的工作簿中的U5正在用于重命名。

Option Explicit

Sub GetSheets()
    Dim path As String
    Dim Filename As String
    Dim wbMaster As Workbook
    Dim wbActive As Workbook
    Dim wsPanel As Worksheet

    Set wbMaster = ThisWorkbook

    path = "C:\Users\Admin\Desktop\PMO\Test consolidation\Independent files"
    If Right$(path, 1) <> "\" Then path = path & "\"
    Filename = Dir(path & "*.xlsm")

    Dim wsname As String

    Do While Filename <> ""     
        Set wbActive = Workbooks.Open(Filename:=path & Filename, ReadOnly:=True)

        With wbActive
            If Evaluate("ISREF('" & "Panel" & "'!A1)") Then 'Rory 'https://stackoverflow.com/questions/6688131/test-or-check-if-sheet-exists
                Set wsPanel = wbActive.Worksheets("Panel")
                wsPanel.Copy After:=wbMaster.Worksheets(1)

                If Not IsEmpty(wsPanel.Range("U5")) Then
                    ActiveSheet.Name = wsPanel.Range("U5")
                Else
                    MsgBox "Missing value to rename worksheet in " & Filename
                End If
            End If
        End With

        wbActive.Close
        Filename = Dir()
    Loop
End Sub