2012-04-07 178 views
1

我有工作簿中,我必須在一個工作簿在活動工作簿複製範圍的範圍可變。當我執行以下操作時,出現錯誤。是否有其他方式來執行此操作。從一個工作簿複製範圍到另一個在Excel VBA中

Dim NTwbk As Workbook 
Dim AppExcel As Excel.Application 
Dim NewRng As Range 
Dim res As Range 
Sub OpenWBK() 
Set AppExcel = New Excel.Application 
Set NTwbk = AppExcel.Workbooks.Open(Sheet1.Range("SecondWorkbookPath")) 
NewRng= NTwbk.Sheets("Sheet1").Range("B3") 

AppExcel.Quit 

End Sub 

我想這也:

NewRng.Value = NTwbk.Sheets("Sheet1").Range("B3").Value 

還沒有工作

回答

0

你已經有Excel中打開,所以你不需要打開第二個副本,以便丟棄:

Dim AppExcel As Excel.Application 
Set AppExcel = New Excel.Application 
AppExcel.Quit 

更改開放:

​​

但是 「SecondWorkbookPath」 不是一個有效的範圍。如果工作表的單元格A1「工作表Sheet1」包含一個有效的路徑和文件名,以下將是美好的:

Set NTwbk = Workbooks.Open(Worksheets("Sheet1").Range("A1").Value) 
Set NewRng = NTwbk.Sheets("Sheet1").Range("B3") 
NTwbk.Close SaveChanges := False 

做上述變化,然後再試一次。

1

腳本的主要問題是,一旦關閉了第二個工作簿(通過AppExcel.Quit或NTwbk.close作爲其他答案列表),您引用的範圍對象就不再存儲在內存中,並且您的變量不再可用。同時分配一個對象變量時必須使用設置:

Set NewRng = Ntwbk.Sheets("Sheet1").Range("B3") 

這不會失敗,但也不會是有用的,因爲你再親密Ntwbk。該工作簿關閉之前將與在必須進行的工作簿的範圍內進行

需要的任何動作。

如果你想要的是範圍的值,這是一個可能的變化:

Dim NTwbk As Workbook 
Dim AppExcel As Excel.Application 
Dim NewRng As Range 
Dim res As String 'Note the change from Range to String 
Sub OpenWBK() 
Set AppExcel = New Excel.Application 
Set NTwbk = AppExcel.Workbooks.Open(Sheet1.Range("SecondWorkbookPath")) 
NewRng = NTwbk.Sheets("Sheet1").Range("B3").Value 

AppExcel.Quit 

End Sub 

然後,您可以自由使用NewRng作爲特定範圍內的其他工作簿中的值。

+0

@Tony Dallimore(我不能在你尚未置評。)我忘了提這個......雖然「SecondWorkBookPath」在技術上不是一個範圍,如果工作簿開啓了一個名爲「SecondWorkBookPath」,那麼範圍代碼將運行並正確應用到指定的範圍。當您想重複引用特定的單元格時,這可能是一個非常方便的功能,但不能保證其地址將保持不變。 – 2012-04-07 21:26:54

+0

確實,如果'SecondWorkBookPath'是一個命名範圍,並且Sheet1是工作表對象,則此代碼可以正常。太多ifs對我來說。然而,當第二本工作簿關閉時,我忽略了NewRng的失效,這是一個嚴重的錯誤。 – 2012-04-07 21:43:16

相關問題