如何使用vba将只有一个工作表复制到另一个工作簿

我有1个WorkBook("SOURCE") ,其中包含大约20张表。
我想使用Excel VBA只复制一个特定工作表到另一个Workbook("TARGET")

请注意,“TARGET”工作簿还不存在。 它应该在运行时创build。

使用的方法 –

1) Activeworkbook.SaveAs <—不起作用。 这将复制所有表单。 我只想要特定的表格。

请回复这个宝贵的意见。

谢谢 !!

我有1个WorkBook(“SOURCE”),其中包含大约20张表。 我想使用Excel VBA只复制一个特定工作表到另一个工作簿(“TARGET”)。 请注意,“TARGET”工作簿还不存在。 它应该在运行时创build。

其他方式

 Sub Sample() '~~> Change Sheet1 to the relevant sheet '~~> This will create a new workbook with the relevant sheet ThisWorkbook.Sheets("Sheet1").Copy '~~> Save the new workbook ActiveWorkbook.SaveAs "C:\Target.xlsx", FileFormat:=51 End Sub 

这将自动创build一个名为Target.xlsx的新工作簿和相关工作表

将工作表复制到名为TARGET的工作簿中:

 Sheets("xyz").Copy After:=Workbooks("TARGET.xlsx").Sheets("abc") 

这将把复制的工作表xyz放到工作表abc后的TARGET工作簿中。显然,如果你想把工作表放到TARGET工作簿之前,在代码中replaceBefore for After。

要创build一个名为TARGET的工作簿,首先需要添加一个新的工作簿,然后保存它以定义文件名:

 Application.Workbooks.Add (xlWBATWorksheet) ActiveWorkbook.SaveAs ("TARGET") 

但是,这可能不适合您,因为它会将工作簿保存在默认位置,例如我的文档。

希望这会给你一些继续。

你可以试试这个VBA程序

 Option Explicit Sub CopyWorksheetsFomTemplate() Dim NewName As String Dim nm As Name Dim ws As Worksheet If MsgBox("Copy specific sheets to a new workbook" & vbCr & _ "New sheets will be pasted as values, named ranges removed" _ , vbYesNo, "NewCopy") = vbNo Then Exit Sub With Application .ScreenUpdating = False ' Copy specific sheets ' *SET THE SHEET NAMES TO COPY BELOW* ' Array("Sheet Name", "Another sheet name", "And Another")) ' Sheet names go inside quotes, seperated by commas On Error GoTo ErrCatcher Sheets(Array("Sheet1", "Sheet2")).Copy On Error GoTo 0 ' Paste sheets as values ' Remove External Links, Hperlinks and hard-code formulas ' Make sure A1 is selected on all sheets For Each ws In ActiveWorkbook.Worksheets ws.Cells.Copy ws.[A1].PasteSpecial Paste:=xlValues ws.Cells.Hyperlinks.Delete Application.CutCopyMode = False Cells(1, 1).Select ws.Activate Next ws Cells(1, 1).Select ' Remove named ranges For Each nm In ActiveWorkbook.Names nm.Delete Next nm ' Input box to name new file NewName = InputBox("Please Specify the name of your new workbook", "New Copy") ' Save it with the NewName and in the same directory as original ActiveWorkbook.SaveCopyAs ThisWorkbook.Path & "\" & NewName & ".xls" ActiveWorkbook.Close SaveChanges:=False .ScreenUpdating = True End With Exit Sub ErrCatcher: MsgBox "Specified sheets do not exist within this workbook" End Sub 

下面更长的例子结合了上面的一些有用的片段:

  • 您可以指定要复制的任意数量的工作表
  • 您可以复制整个工作表,即像拖动标签一样,也可以复制单元格的内容作为值,但保留格式。

它仍然可以做很多工作,使其更好(更好的error handling,一般清理),但它有希望提供一个良好的开端。

请注意,并非所有的格式都被传送,因为新的工作表使用自己的主题的字体和颜色。 我不能解决如何复制那些粘贴为值只。

 选项显式

 Sub copyDataToNewFile()
     Application.ScreenUpdating = False

     '允许不同的方式复制数据:
     'sheet =复制整个工作表
     'valuesWithFormatting =创build一个新名字与
     '原来,只从单元格复制值,然后
     '应用原始格式。 格式只是
    像Paste Special> Formats命令 - 主题一样好
     '颜色和字体不会保留。
     Dim copyMethod As String
     copyMethod =“valuesWithFormatting”

     Dim newFilename As String'Name(+ optional path)of new file
     Dim themeTempFilePath As String'暂时保存源文件的主题

     Dim sourceWorkbook As Workbook'这个文件
    设置sourceWorkbook = ThisWorkbook

     Dim newWorkbook As Workbook'新build文件

     Dim sht As Worksheet'稍后迭代表单。
     Dim sheetFriendlyName As String'存储友好图纸名称
     Dim sheetCount As Long'为了避免必须多次计数

     '表格复制,使用内部代码名称更可靠。
     Dim colSheetObjectsToCopy作为新集合
     colSheetObjectsToCopy.Add Sheet1
     colSheetObjectsToCopy.Add Sheet2

     '从用户获取新文件的文件名。
    做
         newFilename = InputBox(“请指定新工作簿的名称。”&vbCr&vbCr&“input一个完整path或只是一个文件名,在这种情况下,文件将被保存在相同的位置(”&sourceWorkbook.Path& “)。不要使用已打开的工作簿的名称,否则该脚本将中断。”,“新build”)
        如果newFilename =“”那么MsgBox“你必须input一些东西”,vbExclamation,“需要的文件名”
    循环直到newFilename>“”

     '如果他们没有提供path,则假定与源工作簿位置相同。
     “不完美 - 只是假设path已经提供,如果path分隔符
     “存在某处。 可能仍然是一个糟糕的path。 而且,没有检查完成
    看看path是否真的存在。
    如果InStr(1,newFilename,Application.PathSeparator,vbTextCompare)= 0那么
         newFilename = sourceWorkbook.Path&Application.PathSeparator&newFilename
    万一

     '创build一个新的工作簿并保存为用户请求。
     'NB如果文件名与工作簿相同,则失败
     “已经打开 - 它应该检查这个。
    设置newWorkbook = Application.Workbooks.Add(xlWBATWorksheet)
     newWorkbook.SaveAs文件名:= newFilename,_
        的FileFormat:= xlWorkbookDefault

    主题字体和颜色不会被复制到大多数粘贴特殊操作。
    这将保存源工作簿的主题,然后将其加载到新的工作簿中。
     '错误:不起作用!
     'themeTempFilePath = Environ(“temp”)&Application.PathSeparator&sourceWorkbook.Name&“ -  Theme.xml”
     'sourceWorkbook.Theme.ThemeFontScheme.Save themeTempFilePath
     'sourceWorkbook.Theme.ThemeColorScheme.Save themeTempFilePath
     'newWorkbook.Theme.ThemeFontScheme.Load themeTempFilePath
     'newWorkbook.Theme.ThemeColorScheme.Load themeTempFilePath
     '在错误恢复下一步
    杀死themeTempFilePath'kill =在VBA中删除说话
     '在错误转到0


     'getWorksheetNameFromObject返回null如果工作表对象doens't
     '存在
    对于每个sht在colSheetObjectsToCopy中
         sheetFriendlyName = getWorksheetNameFromObject(sourceWorkbook,sht)
         Application.StatusBar =“VBL复制”&sheetFriendlyName
        如果不是IsNull(sheetFriendlyName)那么
            select案例copyMethod
                案例“表”
                     sourceWorkbook.Sheets(sheetFriendlyName).Copy _
                        后:= newWorkbook.Sheets(newWorkbook.Sheets.count)
                案例“valuesWithFormatting”
                     newWorkbook.Sheets.Add After:= newWorkbook.Sheets(newWorkbook.Sheets.count),_
                        types:= sourceWorkbook.Sheets(sheetFriendlyName)。键入
                     sheetCount = newWorkbook.Sheets.count
                     newWorkbook.Sheets(sheetCount).Name = sheetFriendlyName
                     '将当前源表中的所有单元格复制到剪贴板。 可以直接复制
                    通过指定目的地参数,但在这种情况下,新工作簿
                     '我们想要做一个特殊的粘贴,只有值和复制方法不允许。
                     sourceWorkbook.Sheets(sheetFriendlyName).Cells.Copy'Destination:= newWorkbook.Sheets(newWorkbook.Sheets.Count)。[A1]
                     newWorkbook.Sheets(sheetCount)。[A1] .PasteSpecial Paste:= xlValues
                     newWorkbook.Sheets(sheetCount)。[A1] .PasteSpecial Paste:= xlFormats
                     newWorkbook.Sheets(sheetCount).Tab.Color = sourceWorkbook.Sheets(sheetFriendlyName).Tab.Color
                     Application.CutCopyMode = False
            结束select
        万一
    接下来转

     Application.StatusBar = False
     Application.ScreenUpdating = True
     ActiveWorkbook.Save