从excel vba复制一个工作簿到另一个工作簿

我有工作簿,我必须将一个工作簿中的范围复制到活动工作簿中的范围variables。 我得到一个错误,当我执行以下…是否有任何其他方式做到这一点。

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 

也没有工作

您的脚本的主要问题是,一旦closures第二个工作簿(通过AppExcel.Quit或NTwbk.close作为其他答案列表),您引用的范围对象不再在内存中,您的variables不再可用。 另外,当将一个对象分配给一个variables时,你必须使用set:

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

这不会失败,但也不会有用,因为你然后closuresNtwbk。

必须在工作簿closures之前执行任何需要在工作簿中使用范围执行的操作。

如果所有你想要的是范围的值,这是一个可能的变化:

 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作为其他工作簿中特定范围的值。

您已经打开了Excel,因此您不需要打开第二个副本如此丢弃:

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

将开放更改为:

 Set NTwbk = Workbooks.Open(Sheet1.Range("SecondWorkbookPath")) 

但是“SecondWorkbookPath”不是有效的范围。 如果工作表“Sheet1”的单元格A1包含有效的path和文件名称,则以下内容可以:

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

进行上述更改并重试。