簡體   English   中英

使用 Personal.xlsb - 在 VBA 中引用活動工作簿

[英]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.

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