【问题标题】:How to copy a single tab from a workbook into a master workbook using VBA on excel如何在 Excel 上使用 VBA 将单个选项卡从工作簿复制到主工作簿
【发布时间】:2016-01-15 16:39:12
【问题描述】:

我正在尝试将一个选项卡从指定文件夹中的多个工作簿中拉到主工作簿中。到目前为止,这就是我所拥有的:

Sub GetSheets()
Path = "D:\APQP\APQP\Open Projects\"
Filename = Dir(Path & "*.xlsx")
  Do While Filename <> ""
  Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
     For Each Sheet In ActiveWorkbook.Sheets
     Sheets("5-Phase").Select
     Sheets("5-Phase").Copy Before:=ThisWorkbook.Sheets(1)
  Next
     Workbooks(Filename).Close
     Filename = Dir()
  Loop
End Sub

现在当我运行它时,它会使用文件夹中第一个 wookbook 中的 50 个选项卡填充主工作簿,而不是处理选项卡并移动到下一个工作簿并处理该工作簿中的选项卡。任何帮助都会很棒。

【问题讨论】:

  • 您的“For Each”将抓取您打开的工作簿中的每个工作表,但随后复制 5-Phase,因此它为每个工作簿中的每个工作表复制 5-Phase。删除“For”循环,这应该可以解决问题

标签: vba excel


【解决方案1】:

您的代码存在两个主要问题。 For 循环是不必要的,并且您没有使用打开的工作簿。像这样的东西应该适合你:

Sub GetSheets()

    Dim wb As Workbook
    Dim sPath As String
    Dim sFileName As String

    Set wb = ThisWorkbook
    sPath = "D:\APQP\APQP\Open Projects\"
    sFileName = Dir(sPath & "*.xlsx")

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    On Error Resume Next
    Do While Len(sFileName) > 0
        With Workbooks.Open(sPath & sFileName, ReadOnly:=True)
            .Sheets("5-Phase").Copy Before:=wb.Sheets(1)
            .Close False
        End With
        sFileName = Dir()
    Loop
    On Error GoTo 0

    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

【讨论】:

  • @KevinSchneider,请接受此答案以帮助其他 SO 用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多