【问题标题】:VBA Copy Worksheet to a Different Open WorkbookVBA 将工作表复制到另一个打开的工作簿
【发布时间】:2018-09-21 04:24:16
【问题描述】:

尝试将工作簿上的工作表复制到另一个工作表时,我不断收到超出范围错误。原始电子表格 (Master_Data.xlsm) 是运行 vba 脚本的内容。脚本打开另一个电子表格,对其进行操作,然后复制最终工作表以粘贴到 Master_Data.xlsm 工作簿中。

Sub Result_Scrapper()

Dim wb As Workbook, ws As Worksheet, wbFile As Object
Dim masterBook As Workbook
Dim wsa As Worksheet
Dim year As Integer


Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.GetFolder("C:\Users\Output_Spreadsheets\")
Set masterBook = Excel.Workbooks("Master_Data.xlsm")

Application.ScreenUpdating = False
For Each wbFile In fldr.Files
If fso.GetExtensionName(wbFile.Name) = "xlsm" Then
    Set wb = Workbooks.Open(wbFile.Path)
    'Copy sheet of interest
    ActiveSheet.Copy 'Before:=ThisWorkbook.Sheets(“A”) 'tried doing it using before statement but it also caused errors
    'paste sheet into masterBook spread--this is where the error comes
    masterBook.Sheets(Sheets.Count).Paste

    End If
masterBook.Sheets("master").Name = Right([A2], 30)
Next wbFile

【问题讨论】:

标签: vba excel copy-paste worksheet


【解决方案1】:

有两个问题。首先,正如其他人评论的那样,您需要完全限定计数。其次,你会想在一条线上完成;你之前可以这样做,但是你只是推出了最后一张纸,如果你在之后添加它,那么这些床单就会保持秩序。

试试:

ActiveSheet.Copy After:=masterBook.Sheets(masterBook.Sheets.Count)

【讨论】:

  • 或者,更好的是:wb.worksheets("Specify the name here").Copy After:=masterBook.Sheets(masterBook.Sheets.Count),因为您刚刚打开了工作簿wb,并且不知道其中的哪个工作表可能处于活动状态。
  • 我同意,最好摆脱 ActiveSheet,但这是与原始问题不同的问题,并且原始帖子(即工作表名称)中没有足够的信息来实施它。
猜你喜欢
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
相关资源
最近更新 更多