2017-04-14 31 views
1
Sub Hungry4Gages() 
Dim x As Workbook 
Dim y As Workbook 

'## Open both workbooks first: 

Set x = Workbooks.Open("C:\Users\dguitron\Documents\Belize and Sam Project\Class 1\run_10296500.xlsm") 

Set y = ActiveWorkbook 

'Now, copy what you want from x: 

x.Sheets("dashboard").Range("D17").Copy 

'Now, paste to y worksheet: 

y.Sheets("Class1").Range("A1").PasteSpecial 

'Close x: 

x.Close 

End Sub 

「儀表板」是我從複製它的片材的名稱,而「1類」是我在有源粘貼片工作簿。我想的細胞從一個工作簿使用VBA代碼複製到活動工作簿

我收到錯誤「下標超出範圍」爲y.sheets(1類)....

+1

做你'設置y'你這樣做之前,你的'設置X '。 – YowE3K

+0

@ YowE3K - 完全錯過了。你應該回答! – Jeeped

+0

@Jeeped - 剛剛完成(我首先發布了評論,這樣人們就不會在正切尋找其他問題時脫手) – YowE3K

回答

2

在你當前的代碼你正在做

Set x = Workbooks.Open("C:\Users\dguitron\Documents\Belize and Sam Project\Class 1\run_10296500.xlsm") 

Set y = ActiveWorkbook 

Workbooks.Open語句打開一個然後工作簿然後成爲活動工作簿。因此,xy都指向相同的工作簿。

所以,你需要周圍切換順序:

Set y = ActiveWorkbook 

Set x = Workbooks.Open("C:\Users\dguitron\Documents\Belize and Sam Project\Class 1\run_10296500.xlsm") 

由於Jeeped指出,如果你的宏是在你所設置y來,你可以使用Set y = ThisWorkbook的工作簿,然後順序將不重要,或者您可以在任何地方使用ThisWorkbook,否則您會使用y。 (個人而言,我仍然會設置對「靜態」的引用,因爲需要更好的單詞,工作簿,然後打開其他工作簿並設置其對象引用 - 但這只是我個人的偏好,基於我想我在做什麼的樣子)

+1

如果代碼位於源工作簿中,它可能是'Set y = ThisWorkbook'。無論如何,很好! – Jeeped

0

你可以得到價值有點快,無需打開源工作簿與external reference

[Class1!A1].Formula = "='C:\Users\dguitron\Documents\Belize and Sam Project\Class 1\[run_10296500.xlsm]dashboard'!D17" 

[Class1!A1] = [Class1!A1].Value   ' optional to convert the formula to value 
相關問題