2017-09-15 132 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 
相關問題