在excel vba中将范围从一个工作簿复制到另一个工作簿

时间:2012-04-07 19:51:18

标签: excel vba 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

也没有工作

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您已经打开了Excel,因此您无需打开第二个副本以便丢弃:

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

将打开更改为:

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

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

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

进行上述更改,然后重试。