我有一个工作簿,其中包含动态数量的工作表。我想提取的相关工作表总是出现在工作表"表3和#34;之后。问题是相关的工作表有动态名称,例如" Apple-A"," Orange-1"等我希望创建一个代码,它将始终复制每个工作表" Sheet 3"无论他们的命名惯例如何。
到目前为止,我只能在专门调用其名称时复制表格,例如
total = Workbooks("Fruits.xlsm").Worksheets.Count
Workbooks("Fruits").Worksheets("Apple-A").Copy_after:=Workbooks("Fruits.xlsm").Worksheets(total)
是否有一种方法可以在调用某个工作表名称后将大量工作表复制到新工作簿中?
答案 0 :(得分:2)
Workbook.Sheets(index/name)
注意:
定义您正在操作的工作簿始终是一个好主意。接下来让我们仔细看看工作表对象。
使用1 for the first sheet in the workbook
,您可以访问特定位置的工作表=索引,例如wb.Sheets("Sheet 3").Index
或其名称。
现在,您正在寻找您知道名称的工作表旁边的工作表。
Sheet 3
返回wb.Sheets("Sheet 3).Index +1
的位置。现在您希望表单正确。这将位于Dim wbSource As Workbook
Dim wbTarget As Workbook
Set wbSource = Workbooks("Fruits.xlsm")
Dim ws As Worksheet
Set wbTarget = Workbooks.Add
indexOfSheet3 = wbSource.Sheets("Sheet 3").Index
For i = indexOfSheet3 + 1 To wbSource.Sheets.Count
wbSource.Sheets(i).Copy After:= wbTarget.Sheets(wbTarget.Sheets.Count)
Next i
'Delete the defualt sheet
Application.DisplayAlerts = False
wbTarget.Sheets(1).Delete
Application.DisplayAlerts = True
。
编辑:
我认为该问题已经过编辑,可以复制"所有表格'表3'"
此代码:
{{1}}
答案 1 :(得分:0)
我采用相反的方式:将所有工作表复制到新工作簿并删除其前三个工作表:
Workbooks("Fruits.xlsm").Worksheets.Copy
Dim i As Long
Application.DisplayAlerts = False
For i = 3 To 1 Step - 1
Worksheets(i).Delete
Next
Application.DisplayAlerts = True