6

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

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。

4

2 回答 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
于 2012-05-16T08:17:33.827 回答
1

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

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

Unload UserFormName
于 2016-08-31T18:29:15.023 回答