根据单元格值中的选项卡名称跨多个选项卡循环复制到新工作簿功能
Looping a copy to new workbook function across multiple tabs based on tab names in cell values
我想复制跨页中每个选项卡的数据sheet并将其另存为新工作簿。原始工作簿有许多选项卡(大约 50 个),其中一个选项卡设置为 运行 数据的宏,因为将来可能会添加新的选项卡。宏数据选项卡包含每个新工作簿的文件位置、选项卡的名称以及另一个宏用于将这些新创建的工作簿通过电子邮件发送给相关方的一些信息。
问题是让宏识别标签名称以查找要复制的范围,因为标签名称列在一个单元格中。我不确定是否可以使用这个列表,或者我是否在末尾添加一个 sheet 以从指定的开始位置循环遍历所有 sheets 直到那个带有 if.
Sub Datacopy()
Dim ws As Worksheet
With Application
.ScreenUpdating = False
End With
Application.DisplayAlerts = False
Set ws = Sheets("email")
For Each Cell In ws.Columns("B").Cells
Dim file1 As String
file1 = Cell.Offset(0, 3).Text
Sheets("cell.value").Range("A1:L500").Copy
Workbooks.Add.Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteAllUsingSourceTheme)
Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteComments)
ActiveWorkbook.SaveAs Filename:=file1
ActiveWorkbook.Close
Next Cell
Application.DisplayAlerts = True
With Application
.ScreenUpdating = True
End With
MsgBox ("Finished making files!")
End Sub
像这样的东西应该适合你。请注意以下几点:
- 代码假定在 sheet "email" 上它有一个 header 行,即第 1 行,实际数据从第 2 行开始。
- 检查 B 列单元格是否是工作簿中的有效作品sheet名称
我已根据您的原始 post:
验证此代码可以正常工作并且符合预期
Sub Datacopy()
Dim wb As Workbook
Dim wsData As Worksheet
Dim wsTemp As Worksheet
Dim rSheetNames As Range
Dim rSheet As Range
Set wb = ActiveWorkbook
Set wsData = wb.Sheets("email")
Set rSheetNames = wsData.Range("B2", wsData.Cells(Rows.Count, "B").End(xlUp))
If rSheetNames.Row < 2 Then Exit Sub 'No data
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
For Each rSheet In rSheetNames
If Not Evaluate("ISERROR('" & rSheet.Text & "'!A1)") Then
Set wsTemp = Sheets.Add
Sheets(rSheet.Text).Range("A1:L500").Copy
wsTemp.Range("A1").PasteSpecial xlPasteAllUsingSourceTheme
wsTemp.Range("A1").PasteSpecial xlPasteComments
wsTemp.Move
ActiveWorkbook.SaveAs rSheet.Offset(, 3).Text
ActiveWorkbook.Close False
End If
Next rSheet
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
MsgBox "Finished making files!"
End Sub
我想复制跨页中每个选项卡的数据sheet并将其另存为新工作簿。原始工作簿有许多选项卡(大约 50 个),其中一个选项卡设置为 运行 数据的宏,因为将来可能会添加新的选项卡。宏数据选项卡包含每个新工作簿的文件位置、选项卡的名称以及另一个宏用于将这些新创建的工作簿通过电子邮件发送给相关方的一些信息。
问题是让宏识别标签名称以查找要复制的范围,因为标签名称列在一个单元格中。我不确定是否可以使用这个列表,或者我是否在末尾添加一个 sheet 以从指定的开始位置循环遍历所有 sheets 直到那个带有 if.
Sub Datacopy()
Dim ws As Worksheet
With Application
.ScreenUpdating = False
End With
Application.DisplayAlerts = False
Set ws = Sheets("email")
For Each Cell In ws.Columns("B").Cells
Dim file1 As String
file1 = Cell.Offset(0, 3).Text
Sheets("cell.value").Range("A1:L500").Copy
Workbooks.Add.Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteAllUsingSourceTheme)
Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteComments)
ActiveWorkbook.SaveAs Filename:=file1
ActiveWorkbook.Close
Next Cell
Application.DisplayAlerts = True
With Application
.ScreenUpdating = True
End With
MsgBox ("Finished making files!")
End Sub
像这样的东西应该适合你。请注意以下几点:
- 代码假定在 sheet "email" 上它有一个 header 行,即第 1 行,实际数据从第 2 行开始。
- 检查 B 列单元格是否是工作簿中的有效作品sheet名称
我已根据您的原始 post:
验证此代码可以正常工作并且符合预期Sub Datacopy()
Dim wb As Workbook
Dim wsData As Worksheet
Dim wsTemp As Worksheet
Dim rSheetNames As Range
Dim rSheet As Range
Set wb = ActiveWorkbook
Set wsData = wb.Sheets("email")
Set rSheetNames = wsData.Range("B2", wsData.Cells(Rows.Count, "B").End(xlUp))
If rSheetNames.Row < 2 Then Exit Sub 'No data
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
For Each rSheet In rSheetNames
If Not Evaluate("ISERROR('" & rSheet.Text & "'!A1)") Then
Set wsTemp = Sheets.Add
Sheets(rSheet.Text).Range("A1:L500").Copy
wsTemp.Range("A1").PasteSpecial xlPasteAllUsingSourceTheme
wsTemp.Range("A1").PasteSpecial xlPasteComments
wsTemp.Move
ActiveWorkbook.SaveAs rSheet.Offset(, 3).Text
ActiveWorkbook.Close False
End If
Next rSheet
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
MsgBox "Finished making files!"
End Sub