如何用VBA复制Excel中的工作表

  • Share This
Michael Brown

该教程提供了一个在Excel中复制工作表的宏集合:根据单元格值复制和重命名,复制多个工作表,将一个活动的工作表复制到另一个文件而不打开,等等。

在Excel中手动复制工作表是非常快速和直接的......如果只执行一次或两次的话。 多次复制多个工作表是很枯燥和耗时的。 在这个页面,你会发现一些有用的宏来自动完成这项任务。

    Excel VBA将工作表复制到新的工作簿中

    这个最简单的单行宏就像它的名字一样--将活动的工作表复制到一个新的工作簿。

    Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub

    用VBA在Excel中复制多个工作表

    如果你想从活动工作簿中复制几个工作表到一个新的工作簿中,选择所有感兴趣的工作表并运行这个宏。

    Public Sub CopySelectedSheets() ActiveWindow.SelectedSheets.Copy End Sub

    Excel VBA将工作表复制到另一个工作簿中

    根据你想插入复制的工作表的位置,使用下列宏之一。

    复制工作表到另一个工作簿的开头

    该宏将活动工作表复制到目标文件中所有其他工作表之前。 第一册 要复制到另一个文件,用目标工作簿的全名替换 "Book1.xlsx"。

    Public Sub CopySheetToBeginningAnotherWorkbook() activeSheet.Copy Before:=Workbooks( "Book1.xlsx" ).Sheet(1) End Sub

    复制工作表到另一个工作簿的末尾

    这段代码复制了活动的工作表,并将其复制到了 第一册 同样,请记住将 "Book1.xlsx "替换为你的目标工作簿的名称。

    Public Sub CopySheetToEndAnotherWorkbook() activeSheet.Copy After:=Workbooks( "Book1.xlsx").Sheets(Workbooks( "Book1.xlsx").Worksheets.Count) End Sub

    注意:为了使宏发挥作用,目标工作簿必须保存在你的硬盘或网络上。

    复制工作表到选定的工作簿

    为了能够将当前工作表复制到任何打开的工作簿中,你可以创建一个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 Sub

    Excel VBA从另一个工作簿中复制工作表而不打开

    这个宏可以让你从另一个Excel文件中复制一个工作表,而不用打开它。 复制的工作表将被插入到当前工作簿的末尾。

    只要记得在代码中做几个替换就可以了。

    • C:\Users\XXX\Documents\Target_Book.xlsx应该改成你想复制工作表的实际路径和名称。
    • Sheet1应该被替换为你要复制的工作表的名称。
    Public Sub CopySheetFromClosedWorkbook() Dim sourceBook As Workbook Application.ScreenUpdating = False Set sourceBook = Workbooks.Open ( "C:\Users\XXX\Documents\Target_Book.xlsx" ) sourceBook.Sheet( "Sheet1").Copy After:=ThisWorkbook.Sheet( ThisWorkbook.Sheet.Count) sourceBook. Close Application.ScreenUpdating = True End Sub

    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代码插入你自己的书中,或者从我们的样本工作簿中运行一个宏。

    如何在你的工作簿中添加一个宏

    要在你的工作簿中插入代码,请执行以下步骤。

    1. 打开你要复制的工作表。
    2. 按Alt + F11打开Visual Basic编辑器。
    3. 在左侧窗格中,右键单击 这本工作手册 ,然后点击 插入 > 模块 .
    4. 将代码粘贴在代码窗口中。
    5. 按F5来运行宏。

    关于详细的步骤说明,请看如何在Excel中插入VBA代码。

    如何从我们的样本工作簿中运行一个宏

    另外,你可以下载我们的样本工作簿来复制Excel表,并从那里运行代码。

    该样本工作簿包含以下宏。

    复制表格到新工作簿 - 将当前工作表复制到一个新的工作簿。

    复制选定的表格 - 将你选择的多个工作表复制到一个新的工作簿。

    复制工作表到另一本工作簿的开头部分 - 将活动工作表复制到另一个工作簿的开头。

    复制表格到另一本工作簿的末尾 - 将活动工作表复制到另一个Excel文件的末尾。

    复制表和重命名 - 复制当前工作表,按照用户指定的名称重新命名,并将副本放在当前工作簿中所有其他工作表之后。

    复制表和重命名预定义 - 复制活动的工作表,给副本起一个硬编码的名字,并把它放在当前工作簿的最后。

    复制表格和按单元格重命名 - 制作活动工作表的副本,并根据选定的单元格值对其重新命名。

    复制表格和按单元格重命名2 - 复制活动工作表并根据硬编码的单元格地址重新命名。

    CopySheetToClosedWorkbook - 允许你复制工作表到一个封闭的工作簿。

    从已关闭的工作簿中复制表格 - 使你能够从另一个Excel文件中复制一个工作表,而无需打开它。

    多次重复表格 - 让你在Excel中多次复制一个工作表。

    要在你的Excel中运行该宏,只需做以下工作。

    1. 打开下载的工作簿,如果有提示,请启用该内容。
    2. 打开你自己的工作簿,导航到你想复制的工作表。
    3. 在你的工作表中,按Alt + F8,选择感兴趣的宏,然后点击 运行 .

    这就是如何用VBA在Excel中复制工作表的方法。 感谢你的阅读,希望下周在我们的博客上看到你的身影!

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.