在VBA用户窗体关闭已打开的工作簿时出错(Error when closing an opened

2019-06-24 11:55发布

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

Run-time error '1004':

Method 'Close' of object _Workbook failed

我已经确定了最小的代码片段重现该问题。
创建一个新的Excel文件。 在这里面,创建一个窗体。 关于这一点,创建具有以下Click事件代码命令按钮:

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

真正困扰我的是,当命令按钮是不是在一个窗体(在工作表上的是普通按钮直)这个错误不相同的代码发生。

我甚至不知道看解释这种行为,还有什么报告或地方(除了StackOverflow的!)。 我用Excel for Mac 2011中编写VBA,如果有差别可以移动到Windows Excel 2010中。

Answer 1:

是的,在Excel 2011,这是一个bug( 无证-我还没有找到它的文档还 )。 你需要稍微修改代码。 试试这个

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


Answer 2:

我用Excel 11在Mac上这个确切的问题(在Windows上运行良好的Excel 2013),在模块子是从用户窗体称为只发生错误。 如果有人(像我)正试图从一个模块(或其他位置)的一个子/功能不是用户窗体本身,你不能用“我”内使用workbook.close方法。 “我”是只在用户窗体代码本身内使用。

而不是“卸载我”使用卸载功能,您的用户窗体的名称。

Unload UserFormName


文章来源: Error when closing an opened workbook in VBA Userform