无法closures打开的工作簿对象

我有一个macros,用testing数据打开一个Excel文件,对数据执行一些简单的格式化,然后将数据保存为一个新文件(保持最初打开的文件不变)。 我得到了一切工作,直到最后一行,我试图closures最初打开的工作簿。 在尝试closures原始工作簿之前,有一些代码设置了与第一个工作簿不同的工作簿variables,然后打开并closures它? 我对代码在做什么感到困惑,但它closures了用户刚刚保存的新文件,并保留了在打开时打开的原始数据文件。 下面是我的代码。 有人可以解释一下,当它保存并closures工作簿时发生了什么?

Sub Main() ' ' ' 'Define variables Dim wBook As Workbook Dim sBook As String Dim ActSheet As Worksheet Dim ActBook As Workbook Dim CurrentFile As String Dim NewFileType As String Dim NewFile As String 'Get workbook filepath sBook = Application.GetOpenFilename() If sBook = "False" Then End End If 'Open Workbook Set wBook = Workbooks.Open(sBook) 'Unrelated formatting occurs 'Save workbook as new file Application.ScreenUpdating = False ' Prevents screen refreshing. CurrentFile = wBook.FullName NewFileType = "Excel Files 2007 (*.xlsx), *.xlsx," NewFile = Application.GetSaveAsFilename( _ InitialFileName:=NewFileName, _ fileFilter:=NewFileType) If NewFile <> "" And NewFile <> "False" Then wBook.SaveAs Filename:=NewFile, _ FileFormat:=xlOpenXMLWorkbook, _ Password:="", _ WriteResPassword:="", _ ReadOnlyRecommended:=False, _ CreateBackup:=False Set ActBook = wBook Workbooks.Open CurrentFile ActBook.Close End If Application.ScreenUpdating = True wBook.Close End Sub 

当你保存的时候,wBook对象变成了“新文件”。 你可以closures,并罚款。 如果您想要创build一个新的对象而不改变原始对象,则可以使用Workbook.SaveAsCopy。

那么,你的代码中发生了什么:

 wBook.SaveAs 

导致wBook成为“新文件”,“旧文件自动closures”

 Set ActBook = wBook 

基本上是创build两个“新文件”的对象。 旧的文件然后打开使用

 Workbooks.Open CurrentFile 

接着,

 ActBook.Close 

closureswBook和ActBook。

 wBook.Close 

试图closures已经closures的工作簿并引发错误。 (因为和ActBook一样。)

我相信你的意图是:

 Sub Main() ' ' ' 'Define variables Dim wBook As Workbook Dim sBook As String Dim ActSheet As Worksheet Dim ActBook As Workbook Dim CurrentFile As String Dim NewFileType As String Dim NewFile As String 'Get workbook filepath sBook = Application.GetOpenFilename() If sBook = "False" Then End End If 'Open Workbook Set wBook = Workbooks.Open(sBook) 'Unrelated formatting occurs 'Save workbook as new file Application.ScreenUpdating = False ' Prevents screen refreshing. CurrentFile = wBook.FullName NewFileType = "Excel Files 2007 (*.xlsx), *.xlsx," NewFile = Application.GetSaveAsFilename( _ InitialFileName:=NewFileName, _ fileFilter:=NewFileType) If NewFile <> "" And NewFile <> "False" Then wBook.SaveAs Filename:=NewFile, _ FileFormat:=xlOpenXMLWorkbook, _ Password:="", _ WriteResPassword:="", _ ReadOnlyRecommended:=False, _ CreateBackup:=False ' wBook is now the "new file" at this point and the "old file" has been closed. End If Application.ScreenUpdating = True wBook.Close ' Close the new file. End Sub