且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2023-10-12 21:50:16

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

  Private Sub CommandButton1_Click()
Dim filename As String
Dim opened_workbook As Workbook

filename = Application.GetOpenFilename()'用户选择有效的Excel文件
设置opens_workbook = Application.Workbooks.Open(filename)

卸载我

opened_workbook.Close

MsgBox如果你到了这里,它工作!
End Sub


In a subroutine, I want to open a workbook, do some reading from it, and close it.
For some reason, I get an error:

Run-time error '1004':

Method 'Close' of object _Workbook failed

I have identified a minimal code snippet to reproduce the problem.
Create a fresh excel file. In it, create a Userform. On that, create a Command Button with the following Click event code:

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

What really perplexes me is that this error doesn't happen with the same code when the Command button is not on a userform (on a plain button straight on the worksheet).

I don't even know what else to report or where to look to explain this behavior (besides ***!). I'm writing VBA using Excel for Mac 2011 and can move to Windows Excel 2010 if it makes a difference.

Yes, in Excel 2011, it is a bug (Undocumented - I haven't found a documentation for it yet). You have to slightly modify the code. Try this

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