1

我有工作簿,我必须将一个工作簿中的范围复制到活动工作簿中的范围变量。当我执行以下操作时出现错误。有没有其他方法可以做到这一点。

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

也没有工作

4

2 回答 2

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

于 2012-04-07T21:23:27.633 回答
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

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

于 2012-04-07T20:14:55.450 回答