首页 文章

在VBA Userform中关闭已打开的工作簿时出错

提问于
浏览
6

在子例程中,我想打开一个工作簿,从中读取一些工作簿并关闭它 .
出于某种原因,我收到一个错误:

Run-time error '1004':

Method 'Close' of object _Workbook failed

我已经确定了一个最小的代码片段来重现问题 .
创建一个新的Excel文件 . 在其中,创建一个Userform . 在此,使用以下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

令我感到困惑的是,当Command按钮不在用户窗体上时(在工作表上的普通按钮上),相同的代码不会发生此错误 .

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

2 回答

  • 7

    是的,在Excel 2011中,它是一个错误(未记录 - 我还没有找到它的文档) . 您必须稍微修改代码 . 试试这个

    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
    
  • 0

    我在Mac上的Excel 11上遇到了这个确切的问题(在Windows上运行了精细的Excel 2013),只有在从UserForm调用的模块子中发生了错误 . 如果某人(像我一样)试图使用不在UserForm本身内的模块(或其他位置)中的子/函数的workbook.close方法,则不能使用“Me” . '我'只能在UserForm代码本身中使用 .

    而不是'卸载我'使用卸载功能和用户窗体的名称 .

    Unload UserFormName
    

相关问题