Vba 在特定工作表之后复制工作表

Vba 在特定工作表之后复制工作表,vba,excel,Vba,Excel,我有一个工作簿,其中包含动态数量的工作表。我要提取的相关工作表总是出现在工作表“表3”之后。问题是相关工作表具有动态名称,例如“Apple-A”、“Orange-1”等。我想创建一个代码,该代码将始终复制“sheet 3”之后的每个工作表,而不考虑其命名约定 到目前为止,我只能够在特别调用其名称时复制工作表,例如 total = Workbooks("Fruits.xlsm").Worksheets.Count Workbooks("Fruits").Worksheets("Apple-A").

我有一个工作簿,其中包含动态数量的工作表。我要提取的相关工作表总是出现在工作表“表3”之后。问题是相关工作表具有动态名称,例如“Apple-A”、“Orange-1”等。我想创建一个代码,该代码将始终复制“sheet 3”之后的每个工作表,而不考虑其命名约定

到目前为止,我只能够在特别调用其名称时复制工作表,例如

total = Workbooks("Fruits.xlsm").Worksheets.Count
Workbooks("Fruits").Worksheets("Apple-A").Copy_after:=Workbooks("Fruits.xlsm").Worksheets(total)
调用某个工作表名称后,是否有方法将多个工作表复制到新工作簿

Dim wb As Workbook
Set wb = Workbooks("Fruits.xlsm")
Dim ws As Worksheet

Set ws = wb.Sheets(wb.Sheets("Sheet 3").Index +1)
ws.Copy
注:

定义正在操作的工作簿始终是一个好主意。接下来,让我们更仔细地看看工作表对象

使用
Workbook.Sheets(index/name)
您可以在某个位置访问工作表=索引,例如,工作簿中第一张工作表的
1
或通过其名称访问工作表

现在,您正在查找一张与您知道其名称的工作表相邻的工作表

wb.Sheets(“第3页”).Index
返回第3页的位置。现在您希望床单位于其右侧。这将位于位置
wb.Sheets(“第3页).索引+1

编辑:

我认为该问题已被编辑为复制“第3页之后的所有页”

此操作的代码:

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
注:

定义您正在操作的工作簿始终是一个好主意。接下来,让我们更详细地了解工作表对象

使用
Workbook.Sheets(index/name)
您可以在某个位置访问工作表=索引,例如,工作簿中第一张工作表的
1
或通过其名称访问工作表

现在,您正在查找一张与您知道其名称的工作表相邻的工作表

wb.Sheets(“Sheet 3”).Index
返回
Sheet 3
的位置。现在您希望该工作表位于其右侧。它将位于位置
wb.Sheets(“Sheet 3”).Index+1

编辑:

我认为该问题已被编辑为复制“第3页之后的所有页”

此操作的代码:

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

我会采取相反的方法:将所有工作表复制到新工作簿,并删除其前三个工作表:

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

我会采取相反的方法:将所有工作表复制到新工作簿,并删除其前三个工作表:

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

如果要使用第三张工作表,无论名称如何,都可以使用
工作簿(“Fruits.xlsm”).Sheets(3).Range(“A1”)…
,这将对第三张(通过索引)工作表中的
A1
起作用。因此,如果您从左到右查看工作表选项卡,它将选择第三张工作表。但是名为“工作表3”的工作表可能不是第三张工作表……如果您想使用第三张工作表,无论其名称如何,您都可以使用
工作簿(“Fruits.xlsm”).Sheets(3).范围(“A1”)…
,这将对第三张工作表中的
A1
起作用(通过索引)工作表。因此,如果您从左到右查看工作表选项卡,它将选择第三张工作表。但称为“工作表3”的工作表可能不是第三张工作表……这仅适用于“工作表3”的情况也在工作簿的索引3中,这在大多数情况下是一个合理的假设,但在问题中没有说明,因此我想在您的回答中说明。这仅适用于“表3”也在工作簿的索引3中,这在大多数情况下是一个合理的假设,但在问题中没有说明,因此我会在您的回答中说明。我得到一个运行时错误424,但我没有看到任何工作簿名称和维度indexOfSheet3的错误实现。还有其他提示吗?没关系!只是一个更正:wbSource、 Sheets(i).换行后复制我得到一个运行时错误424,但我没有看到任何工作簿名称和标注索引表3的错误实现。还有其他提示吗?没关系!只是一个更正:wbSource.Sheets(i).换行后复制