2016-09-29 119 views
0

我的Personal.xlsb文件中的模塊中有許多腳本。它保持隱藏狀態,但是在這個腳本中,想法是每次在不同的工作簿中運行它。它打開一個單獨的工作簿(source.xlsx),從中複製一個範圍,粘貼到原始工作簿中,然後關閉source.xlsx。使用Personal.xlsb - 在VBA中引用活動工作簿

當涉及到「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 

回答

0

如果我明白了,您應該只添加另一個工作簿變量。

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 
+1

太棒了。太棒了!謝謝! – Robby

3

不要在大多數情況下使用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 

運氣!

+0

我會盡量避免使用ActiveSheet – BruceWayne

+1

在大多數情況下,我也會這樣做,但在這種情況下,OP特別聲明這個想法是從多個工作簿運行宏,並將信息複製到任何屏幕在時間。 – Werrf

相關問題