我有工作簿,我必须将一个工作簿中的范围复制到活动工作簿中的范围变量。我执行以下操作时收到错误..是否有其他方法可以执行此操作。
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 :(得分: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
进行上述更改,然后重试。