簡體   English   中英

在 VBA 用戶窗體中關閉打開的工作簿時出錯

[英]Error when closing an opened workbook in VBA Userform

在一個子程序中,我想打開一個工作簿,從中讀取一些信息,然后關閉它。
出於某種原因,我收到一個錯誤:

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。

是的,在 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

我在 Mac 上的 Excel 11 上遇到了這個確切的問題(在 Windows 上運行良好的 Excel 2013),只有錯誤發生在從用戶窗體調用的模塊子中。 如果有人(像我一樣)試圖從不在用戶窗體內部的模塊(或其他位置)中的子/函數中使用 workbook.close 方法,則不能使用“我”。 “我”只能在用戶窗體代碼本身中使用。

使用卸載函數和您的用戶表單名稱代替“卸載我”。

Unload UserFormName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM