Table of contents
该教程提供了一个在Excel中复制工作表的宏集合:根据单元格值复制和重命名,复制多个工作表,将一个活动的工作表复制到另一个文件而不打开,等等。
在Excel中手动复制工作表是非常快速和直接的......如果只执行一次或两次的话。 多次复制多个工作表是很枯燥和耗时的。 在这个页面,你会发现一些有用的宏来自动完成这项任务。
Excel VBA将工作表复制到新的工作簿中
这个最简单的单行宏就像它的名字一样--将活动的工作表复制到一个新的工作簿。
Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub用VBA在Excel中复制多个工作表
如果你想从活动工作簿中复制几个工作表到一个新的工作簿中,选择所有感兴趣的工作表并运行这个宏。
Public Sub CopySelectedSheets() ActiveWindow.SelectedSheets.Copy End SubExcel VBA将工作表复制到另一个工作簿中
根据你想插入复制的工作表的位置,使用下列宏之一。
复制工作表到另一个工作簿的开头
该宏将活动工作表复制到目标文件中所有其他工作表之前。 第一册 要复制到另一个文件,用目标工作簿的全名替换 "Book1.xlsx"。
Public Sub CopySheetToBeginningAnotherWorkbook() activeSheet.Copy Before:=Workbooks( "Book1.xlsx" ).Sheet(1) End Sub复制工作表到另一个工作簿的末尾
这段代码复制了活动的工作表,并将其复制到了 第一册 同样,请记住将 "Book1.xlsx "替换为你的目标工作簿的名称。
注意:为了使宏发挥作用,目标工作簿必须保存在你的硬盘或网络上。
复制工作表到选定的工作簿
为了能够将当前工作表复制到任何打开的工作簿中,你可以创建一个UserForm(名为 用户表格1 )与一个 列表框 控制 ( 名为ListBox1 )和两个按钮。
接下来,双击该表格,在代码窗口中粘贴以下代码。
Public SelectedWorkbook As String Private Sub UserForm_Initialize() SelectedWorkbook = "" ListBox1.Clear For Each wbk In Application.Workbooks ListBox1.AddItem (wbk.Name) Next End Sub Private Sub CommandButton1_Click() If ListBox1.ListIndex> -1 Then SelectedWorkbook = ListBox1.List(ListBox1.ListIndex) End If Me.Hide End Sub Private Sub CommandButton2_Click() SelectedWorkbook = " " Me.Hide End子有了UserForm,你可以使用下面的一个宏来复制活动工作表到你选择的工作簿中。
拷贝单到 所选工作簿的开头 :
Public Sub CopySheetToBeginningAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheet(1) End If Unload UserForm1 End Sub拷贝单到 所选工作簿的结束 :
Public Sub CopySheetToEndAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy After:=Workbooks( _ UserForm1.SelectedWorkbook).Sheet( _ Workbooks(UserForm1.SelectedWorkbook). _ Worksheets.Count) End If Unload UserForm1 End Sub当在Excel中运行时,该宏会向你显示所有当前打开的工作簿的列表。 你选择需要的那个,然后点击确定。
用Excel宏复制工作表并重命名
当你在Excel中复制一个工作表时,复制件会被赋予一个默认格式的名称,如 第1张 (2) 下面的宏可以免除你手动改变默认名称的麻烦。
这段代码复制了活动的工作表,将副本命名为 "测试表"(你可以用任何你喜欢的其他名称代替),并将复制的工作表放在当前工作簿的最后。
Public Sub CopySheetAndRenamePredefined() activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = "Test Sheet" End Sub为了让用户能够 为复制的工作表指定名称 ,使用这个代码。
Public Sub CopySheetAndRename() Dim newName As String On Error Resume Next newName = InputBox( "Enter name for the copied worksheet" ) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub运行后,该宏显示以下输入框,你可以在其中输入所需的名称,然后按确定。
Excel宏复制工作表并根据单元格值重命名
在某些情况下,用一个特定的单元格值来命名一个副本可能更方便,例如,一个列的标题。 对于这一点,你只需采用上述代码并提供 当前选定的单元格 和前面的例子一样,该副本将被放在活动工作簿的末尾。
最棘手的部分是让你的用户在运行宏之前总是选择正确的单元格 :)
Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox( "Enter name for copied worksheet" , "Copy worksheet" , ActiveCell.Value) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub另外,你可以 硬编码单元格的地址 要想根据另一个单元格来命名复制的工作表,请用适当的单元格引用替换A1。
Public Sub CopySheetAndRenameByCell2() Dim wks As Worksheet Set wks = activeSheet activeSheet.Copy After:=Worksheets(Sheet.Count) If wks.Range( "A1").Value "" Then On Error Resume Next activeSheet.Name = wks.Range( "A1").Value End If wks.Activate End Sub将工作表复制到一个封闭的工作簿的宏程序
这个宏将活动工作表复制到一个已关闭的工作簿的末尾,代码中没有指定另一个工作簿的名称--宏将打开标准的Windows资源管理器窗口,允许你选择任何目标文件。
在你选择文件并点击 开放式 ,该宏将复制活动工作表并自动关闭目标工作簿。
Public Sub CopySheetToClosedWorkbook() Dim fileName Dim closedBook As Workbook Dim currentSheet As Worksheet fileName = Application.GetOpenFilename( "Excel Files (*.xlsx), *.xlsx" ) If fileName False Then Application.ScreenUpdating = False Set currentSheet = Application.activeSheet Set closedBook = Workbooks.Open (fileName) currentSheet.Copy After:=closedBook.Sheets(closedBook.Worksheets.Count)closedBook. Close ( True ) Application.ScreenUpdating = True End If End SubExcel VBA从另一个工作簿中复制工作表而不打开
这个宏可以让你从另一个Excel文件中复制一个工作表,而不用打开它。 复制的工作表将被插入到当前工作簿的末尾。
只要记得在代码中做几个替换就可以了。
- C:\Users\XXX\Documents\Target_Book.xlsx应该改成你想复制工作表的实际路径和名称。
- Sheet1应该被替换为你要复制的工作表的名称。
Excel的VBA将工作表重复多次
有时,你可能需要多次重复同一工作表,例如在同一数据集上测试不同的公式。 这可以通过以下宏轻松实现。
Public SubplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "How many copies of active sheet do you want to make?" ) If n>= 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End Sub打开原始工作表,运行宏,指定你想复制多少份活动表,然后点击 认可 :
如何用VBA在Excel中复制工作表
要在Excel中复制一个带有上述宏的工作表,你可以把VBA代码插入你自己的书中,或者从我们的样本工作簿中运行一个宏。
如何在你的工作簿中添加一个宏
要在你的工作簿中插入代码,请执行以下步骤。
- 打开你要复制的工作表。
- 按Alt + F11打开Visual Basic编辑器。
- 在左侧窗格中,右键单击 这本工作手册 ,然后点击 插入 > 模块 .
- 将代码粘贴在代码窗口中。
- 按F5来运行宏。
关于详细的步骤说明,请看如何在Excel中插入VBA代码。
如何从我们的样本工作簿中运行一个宏
另外,你可以下载我们的样本工作簿来复制Excel表,并从那里运行代码。
该样本工作簿包含以下宏。
复制表格到新工作簿 - 将当前工作表复制到一个新的工作簿。
复制选定的表格 - 将你选择的多个工作表复制到一个新的工作簿。
复制工作表到另一本工作簿的开头部分 - 将活动工作表复制到另一个工作簿的开头。
复制表格到另一本工作簿的末尾 - 将活动工作表复制到另一个Excel文件的末尾。
复制表和重命名 - 复制当前工作表,按照用户指定的名称重新命名,并将副本放在当前工作簿中所有其他工作表之后。
复制表和重命名预定义 - 复制活动的工作表,给副本起一个硬编码的名字,并把它放在当前工作簿的最后。
复制表格和按单元格重命名 - 制作活动工作表的副本,并根据选定的单元格值对其重新命名。
复制表格和按单元格重命名2 - 复制活动工作表并根据硬编码的单元格地址重新命名。
CopySheetToClosedWorkbook - 允许你复制工作表到一个封闭的工作簿。
从已关闭的工作簿中复制表格 - 使你能够从另一个Excel文件中复制一个工作表,而无需打开它。
多次重复表格 - 让你在Excel中多次复制一个工作表。
要在你的Excel中运行该宏,只需做以下工作。
- 打开下载的工作簿,如果有提示,请启用该内容。
- 打开你自己的工作簿,导航到你想复制的工作表。
- 在你的工作表中,按Alt + F8,选择感兴趣的宏,然后点击 运行 .
这就是如何用VBA在Excel中复制工作表的方法。 感谢你的阅读,希望下周在我们的博客上看到你的身影!