簡體   English   中英

Excel將工作簿與vba同步

[英]Excel synchronize workbooks with vba

我想問一下您是否可以幫助我將工作簿A中的一些工作表數據復制到我的活動工作簿(工作簿B)中

我在主工作簿中具有以下代碼,用於從工作簿A復制數據

Public Sub Worksheet_Activate()

    test

End Sub


Sub test()
    Dim Wb1 As Workbook
    Dim MainBook As Workbook

    'Open All workbooks first:
    Set Wb1 = Workbooks.Open("Z:\Folder\WorkbookA.xlsm")
'Set MainBook = Workbooks.Open(Application.ActiveWorkbook.FullName)
Set MainBook = Application.ActiveWorkbook

'Now, copy what you want from wb1:
Wb1.Sheets("Projekte").Cells.Copy
'Now, paste to Main worksheet:
MainBook.Worksheets("Projekte").Range("A1").PasteSpecial xlPasteAll
Application.CutCopyMode = False

    'Close Wb's:
    Wb1.Close SaveChanges:=False

End Sub

我知道,它打開了工作表A,並且突出顯示並復制了數據。

該腳本不會將其粘貼到工作表B(從中執行腳本)

有人知道我做錯了嗎?

親切的問候,謝謝您的幫助!

您應該首先在原點之前設置Mainbook(目的地)(如果要使用ActiveWorkbook )。

'Set MainBook First
   Set MainBook = ThisWorkbook
'Open All workbook:
   Set Wb1 = Workbooks.Open("Z:\Folder\WorkbookA.xlsm")

為了清楚起見,這只是我擔任OC的職責。

您必須正確引用您的工作簿和工作表對象

如果您必須粘貼范圍的全部內容(包括格式,注釋等),則需要編寫如下代碼(注釋中的解釋):

Option Explicit

Sub test()
    Dim targetSheet As Worksheet

    Set targetSheet = ActiveSheet 'store currently active sheet
    Workbooks.Open("Z:\Folder\WorkbookA.xlsm").Sheets("Projekte").UsedRange.Copy Destination:=targetSheet.Range("A1") ' open the wanted workbook and copy its "Projekte" sheet used range to 'targetSheet (i.e.: the sheet in the workbook where it all started) from its cell A1
    ActiveWorkbook.Close SaveChanges:=False ' close the currently active workbook (i.e. the just opened one)
End Sub

如果您只需要粘貼值,那么這就是方法(快得多!):

Option Explicit

Sub test()
    Dim targetSheet As Worksheet

    Set targetSheet = ActiveSheet 'store currently active sheet

    With Workbooks.Open("Z:\Folder\WorkbookA.xlsm").Sheets("Projekte").UsedRange ' open the wanted workbook and reference its sheet "Projekte" used range
        targetSheet.Range("A1").Resize(.Rows.Count, .Columns.Count).Value = .Value
        .Parent.Parent.Close SaveChanges:=False 'close the parent workbook of referenced range (i.e., the newly opened workbook)
    End With
End Sub

我的建議是永遠不要使用ActiveWorkbook

在大多數情況下,當人們使用ActiveWorkbook他們實際上是在使用ThisWorkbook 區別在於:

  • ActiveWorkbook是當前選中的代碼,它恰好在您的代碼運行的那一刻“在屏幕上方”。 可以是用戶在代碼運行時單擊的任何工作簿。 因此,您永遠無法百分百確定獲得正確的工作簿。

  • ThisWorkbook是您的代碼當前運行的實際工作簿。 而且這永遠不會改變。 因此,這是一個定義明確的參考,目前尚無關於哪個工作簿最重要的內容。

關於為什么您的方法無效的原因

Set Wb1 = Workbooks.Open("Z:\Folder\WorkbookA.xlsm") 'this line makes WorkbookA the active one
Set MainBook = Application.ActiveWorkbook 'this makes MainBook = WorkbookA

因此,一個簡單的Set MainBook = Application.ThisWorkbook應該在這里工作。

另一個建議

Worksheets SheetsWorksheets是不同的。 確保可以使用Worksheets Sheets時不要使用Worksheets

  • 工作Sheets包含工作表和圖表
  • Worksheets僅包含工作表

如果示例Sheets(1).Range("A1")是圖表,則會失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM