使用Personal.xlsb – 在VBA中引用活动工作簿

我有一些在我的Personal.xlsb文件模块中的脚本。 它被隐藏起来,但是在这个脚本中,这个想法是每次在不同的工作簿中运行它。 它打开一个单独的工作簿(source.xlsx),复制一个范围,粘贴到原始工作簿,然后closuressource.xlsx。

当涉及到“ThisWorkbook.ActiveSheet.Paste”部分时,它将其粘贴到Personal.xlsb工作簿中,而不是实际打开并可见的目标工作簿。 我怎样才能确保它被粘贴在正确的工作簿? 工作簿的文件名将始终不同,所以我不能指定一个path或类似的东西。

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 

如果我理解它,你应该添加另一个工作簿variables。

 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 

在大多数情况下不要使用ThisWorkbook ,因为它引用macros存储在其中的工作簿(在本例中为personal.xlsb)。

相反,您可以使用ActiveWorkbook来引用在运行macros时的任何工作簿。 您也可以将ActiveWorkbook分配给variables以便于参考。

 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 

运气!