[英]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
Sheets
和Worksheets
是不同的。 確保可以使用Worksheets
Sheets
時不要使用Worksheets
。
Sheets
包含工作表和圖表 Worksheets
僅包含工作表 如果示例Sheets(1).Range("A1")
是圖表,則會失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.