[英]Using Personal.xlsb - referencing active workbook in VBA
我的 Personal.xlsb 文件的模塊中有許多腳本。 它一直處於隱藏狀態,但在此腳本中,您每次都在不同的工作簿中運行它。 它打開一個單獨的工作簿 (source.xlsx),從中復制一個范圍,粘貼到原始工作簿中,然后關閉 source.xlsx。
當涉及到“ThisWorkbook.ActiveSheet.Paste”部分時,它會將其粘貼到 Personal.xlsb 工作簿中,而不是實際打開且可見的目標工作簿中。 如何確保將其粘貼到正確的工作簿中? 工作簿的文件名總是不同的,所以我不能指定路徑或類似的東西。
Sub CopyData()
Application.DisplayAlerts = False
Dim wbSource As Workbook
Set wbSource = Workbooks.Open(Filename:="source.xlsx", UpdateLinks:=3)
wbSource.Sheets(1).Range("A1:X105").Copy
ThisWorkbook.ActiveSheet.Paste
wbSource.Close
Application.DisplayAlerts = True
Call CopyCFormat
End Sub
在大多數情況下不要使用ThisWorkbook
,因為它引用存儲宏的工作簿(在這種情況下,personal.xlsb)。
相反,您可以使用ActiveWorkbook
來引用運行宏時具有焦點的任何工作簿。 您還可以將ActiveWorkbook
分配給一個變量以便於參考。
Sub CopyData()
Application.DisplayAlerts = False
Dim wbSource As Workbook
Dim wbTarget as Workbook
Set wbTarget = ActiveWorkbook
Set wbSource = Workbooks.Open(Filename:="source.xlsx", UpdateLinks:=3)
wbSource.Sheets(1).Range("A1:X105").Copy
wbTarget.ActiveSheet.Paste
wbSource.Close
Application.DisplayAlerts = True
Call CopyCFormat
End Sub
您還可以引用活動工作表而不指定它在哪個工作簿中,如下所示:
Dim wbSource As Workbook
Dim shtTarget as Worksheet
Set shtTarget = ActiveSheet
Set wbSource = Workbooks.Open(Filename:="source.xlsx", UpdateLinks:=3)
wbSource.Sheets(1).Range("A1:X105").Copy
shtTarget.ActiveSheet.Paste
運氣!
如果我理解它,您應該添加另一個工作簿變量。
Sub CopyData()
Dim mainWB As Workbook
Dim mainWS As Worksheet
Set mainWB = ActiveWorkbook
Set mainWS = mainWB.Sheets(1) ' Change this to whatever you need it to be
Application.DisplayAlerts = False
Dim wbSource As Workbook
Set wbSource = Workbooks.Open(Filename:="source.xlsx", UpdateLinks:=3)
wbSource.Sheets(1).Range("A1:X105").Copy
mainWS.Paste
wbSource.Close
Application.DisplayAlerts = True
Call CopyCFormat
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.