在VBA Userform中closures打开的工作簿时出错

在一个子程序中,我想打开一个工作簿,从中读取并closures它。
出于某种原因,我得到一个错误:

Run-time error '1004': Method 'Close' of object _Workbook failed 

我已经确定了一个最小的代码片段来重现这个问题。
创build一个新的Excel文件。 在其中创build一个用户窗体。 在此,使用以下Click事件代码创build一个命令button:

 Private Sub CommandButton1_Click() Dim filename As String Dim opened_workbook As Workbook filename = Application.GetOpenFilename() ' User selects valid Excel file Set opened_workbook = Application.Workbooks.Open(filename) ' File operations would occur here opened_workbook.Close ' Exception thrown here MsgBox "If you got here, it worked!" Unload Me End Sub 

令我困惑的是,当Commandbutton不在用户窗体上(在工作表上的一个普通button上)时,这个错误不会发生在相同的代码中。

我什至不知道还有什么报告或在哪里看解释这种行为(除了StackOverflow!)。 我正在使用Excel for Mac 2011编写VBA,如果它有所作为,可以转移到Windows Excel 2010。

是的,在Excel 2011中,这是一个错误( 未logging – 我还没有find它的文档 )。 你必须稍微修改代码。 尝试这个

 Private Sub CommandButton1_Click() Dim filename As String Dim opened_workbook As Workbook filename = Application.GetOpenFilename() ' User selects valid Excel file Set opened_workbook = Application.Workbooks.Open(filename) Unload Me opened_workbook.Close MsgBox "If you got here, it worked!" End Sub 

我在Mac上的Excel 11上有这个确切的问题(在Windows上工作良好的Excel 2013),只有从用户窗体调用的模块子中发生错误。 如果有人(比如我)正在尝试使用不在UserForm本身内部的模块(或其他位置)中的子/函数使用workbook.close方法,则不能使用“我”。 “我”只能在UserForm代码中使用。

而不是“卸载我”使用卸载函数和您的用户窗体的名称。

 Unload UserFormName