创建新的工作簿并通过

问题描述:

创建新的工作簿问题围绕一个工作簿展开,其中包含我的所有数据和分布在大量工作表中的故障。我试图让宏设置为将选择表单复制到新的工作簿中。我认为我最大的问题是获取目标工作簿的编码权限,因为该名称包含每天更改的日期字符串。我已经走到这一步,刚刚创建的新工作簿,并关闭它的代码是:创建新的工作簿并通过

Sub NewReport() 
    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 

    MyDate = Date 

    Dim dateStr As String 
    dateStr = Format(MyDate, "MM-DD-YY") 

    Set W = Application.Workbooks.Add 

    W.SaveAs Filename:="N:\PAR\" & "New Report Name" & " " & dateStr, FileFormat:=51 

    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 

    ActiveWorkbook.Close True 
End Sub 

这工作和做什么,我想关于创建新的文件,命名它应该命名方式并在最后关闭它。我需要帮助的是将原始工作簿中的特定工作表复制到这个新工作簿的中间部分。我在想的是沿着这样的路线:

With Workbooks("Original Workbook.xlsm") 
      .Sheets(Array("Sheet1", "Sheet2")).Copy_ Before:=Workbooks("destination.xls").Sheet1 

或至少有一些类型的数组,以得到我想要复制的。最大的问题在于获取目标工作簿路径名称正确。任何关于这个小项目的个别部分或整体的建议非常感谢。谢谢!

编辑:我还需要指出,正在生成的新工作簿需要只是普通的旧Excel格式(.xlsx)。没有宏,没有安全警告用于自动更新链接或启用宏,zip。只是一本简单的书,我告诉它放在那里。

确定的。我现在终于开始工作了。工作表名称被结转(否则我将不得不后退并重新命名);它会保存一个要发送的副本和一个副本到我们的存档文件夹;并且新的工作簿不会获得有关启用宏或更新链接的任何弹出窗口。我最终确定的代码(可能会稍微修改一下)是:

Sub Report() 

    Dim Wb1 As Workbook 
    Dim dateStr As String 
    Dim myDate As Date 
    Dim Links As Variant 
    Dim i As Integer 

    With Application 
     .ScreenUpdating = False 
     .DisplayAlerts = False 
     .EnableEvents = False 
    End With 

    Set Wb1 = ActiveWorkbook 

    myDate = Date 

    dateStr = Format(myDate, "MM-DD-YYYY") 

    Wb1.Sheets(Array("Sheet1Name", "Sheet2Name", "etc."))Copy 

    With ActiveWorkbook 
    Links = .LinkSources(xlExcelLinks) 
    If Not IsEmpty(Links) Then 
     For i = 1 To UBound(Links) 
      .BreakLink Links(i), xlLinkTypeExcelLinks 
     Next i 
    End If 

    End With 

    ActiveWorkbook.SaveAs Filename:="N:\" & "Report Name" & " " & dateStr, FileFormat:=51 
    ActiveWorkbook.SaveAs Filename:="N:\Report Archive\" & "Report Name" & " " & dateStr, FileFormat:=51 

    ActiveWorkbook.Close 

    With Application 
     .ScreenUpdating = True 
     .DisplayAlerts = True 
     .EnableEvents = True 
    End With 
End Sub 

希望能够帮助其他人解决同一问题!

你的副本线应

Workbooks("Original Workbook.xlsm").Sheets(Array("Sheet1", "Sheet2")).Copy _ 
Before:=W.Sheets(1) 

你可以让你的代码完全可变的,而不是harcoding“原单Workbook.xlsm”和工作表Sheet1和sheet2名称

如果您使用两个工作簿变量,那么你可以将ActiveWorbook(即当前在Excel中选择的那个)设置为要复制的工作簿(或者可以将其设置为已关闭的工作簿,现有的已打开已命名的工作簿或包含该代码的工作簿)。

使用标准

Application.Workbooks.Add 

你会得到安装,按您的默认选项(normnally 3张) 张数的新的工作簿通过指定

Application.Workbooks.Add(1) 

一个新的工作簿只用一张纸创建

并注意我通过将EnableEvents设置为False来禁用宏,但是将应用程序e创建工作簿

时然后复制片使用

Sheets(Array(Wb1.Sheets(1).Name, Wb1.Sheets(2).Name)).Copy 
'rather than 
Sheets(Array("Sheet1", "Sheet2")).Copy 

时避免硬编码表名称运行通风口被复制。此代码将两个leftmoast片拷贝,不论命名

最后最初单一的纸张被去除留给你只有两个复印张新文件内

Sub NewReport() 
    Dim Wb1 As Workbook 
    Dim Wb2 As Workbook 
    Dim dateStr As String 
    Dim myDate As Date 

    With Application 
     .ScreenUpdating = False 
     .DisplayAlerts = False 
     .EnableEvents = False 
    End With 

    Set Wb1 = ActiveWorkbook 

    myDate = Date 

    dateStr = Format(myDate, "MM-DD-YY") 

    Set Wb2 = Application.Workbooks.Add(1) 
    Wb1.Sheets(Array(Wb1.Sheets(1).Name, Wb1.Sheets(2).Name)).Copy Before:=Wb2.Sheets(1) 
    Wb2.Sheets(Wb2.Sheets.Count).Delete 
    Wb2.SaveAs Filename:="c:\test\" & "New Report Name" & " " & dateStr, FileFormat:=51 

    Wb2.Close 
    With Application 
     .ScreenUpdating = True 
     .DisplayAlerts = True 
     .EnableEvents = True 
    End With 
End Sub 
+0

获取错误消息:此对象不支持此属性或方法。 – Jon

+0

Jon在哪一行? – brettdj

+0

好吧,现在这是一个新的错误信息 - 它说它不能复制工作表,因为目标没有相同数量的行和列,并且如果我想移动数据,那么我应该复制并粘贴它。 – Jon