2017-09-15 135 views
2

我需要每天将整个电子表格从主工作簿复制到另一个工作簿(workbook2)。然后我需要使用工作簿2中的当前日期重命名选项卡。我不想打开工作簿2.我想自动点击主工作簿上的宏按钮以更新保存在其他位置的其他工作簿。从主工作簿中复制整个工作表并粘贴到另一个工作簿中

这是我试过的宏录制

Sub Graph() 
    Cells.Select 
    Selection.Copy 
    ActiveWindow.ActivateNext 
    Sheets.Add After:=Sheets(Sheets.Count) 
    Sheets("Sheet2").Name = "04 08 2017" 
    Cells.Select 
    ActiveSheet.Paste 
    ActiveWindow.ActivateNext 
End Sub 
+3

你** **将需要以添加一些内容,打开工作簿2。您可能会考虑以不可见的方式打开它,添加页面然后关闭它,但不得不打开它。 – CLR

+0

而不是剪切和粘贴,您可以使用worksheet.copy复制整个工作表。无论如何,正如CLR所说,无论如何您都必须打开目标工作簿(或创建一个新工作簿)。 – FunThomas

+0

另外,您可以在工作表级别进行复制,而不是在单元/范围级别更高效。在以下位置录制一个宏:打开工作簿2,然后将工作表1从工作簿1移动/复制到工作簿2,重命名该选项卡,然后关闭并保存工作簿2.这将为您提供所需的大纲代码,然后您可以将行添加到关闭/屏幕更新等。 – CLR

回答

2

正如@CLR已经提到的,你需要打开一个工作簿片粘贴到其中。

类似下面的内容可以工作,但请注意,这只是一个示例,并不是一个完整的工作解决方案。

您仍然至少需要实现一个适当的错误处理...

  1. 捕获错误,同时打开工作簿,它是受保护的(因为另一个用户已打开)或错误的文件/路径。
  2. 在重命名工作表时捕获错误,因为名称必须是唯一的。重新使用现有名称将会引发错误。

如果发生错误,不执行错误处理可能会导致未确定的条件。


Option Explicit 'first line in your module forces correct variable declare. 

Public Sub Graph() 
    Application.ScreenUpdating = False 'Disable screenupdating 

    'Open destination workbook 
    Dim DestWorkbook As Workbook 
    Set DestWorkbook = Workbooks.Open(Filename:="C:\YourPathHere\Workbook2.xlsx") 

    With DestWorkbook 
     'Copy ActiveSheet 
     ThisWorkbook.ActiveSheet.Copy After:=.Sheets(.Sheets.Count) 
     'Instead of copying the ActiveSheet I recommend to copy a specific sheet by name 
     'ThisWorkbook.Worksheets("YourSourceSheetName").Copy After:=.Sheets(.Sheets.Count) 

     'Rename last sheet (the one we inserted above) 
     .Sheets(.Sheets.Count).Name = "04 08 2017" 

     'Close and save workbook2 
     .Close SaveChanges:=True 
    End With 

    Application.ScreenUpdating = True 'Enable screenupdating 
End Sub 
相关问题