Вопрос по excel, vba – Ошибка при закрытии открытой книги в VBA Userform

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

Что меня действительно смущает, так это то, что эта ошибка не возникает с тем же кодом, когда кнопка «Command» не находится на пользовательской форме (на простой кнопке прямо на рабочем листе).

Я даже не знаю, что еще сообщать или где искать объяснение этого поведения (кроме StackOverflow!). Я пишу на VBA с использованием Excel для Mac 2011 и могу перейти на Windows Excel 2010, если это имеет значение.

Черт :( Полагаю, я должен сам сейчас протестировать его на Windows. Хотя мне бы очень хотелось увидеть решение, которое работает как для Windows, так и для Mac. Prashant Kumar
FWIW, ваш код, кажется, работает для меня в Windows Excel 2010 с пользовательской формой (а также в виде простого кода). stephan

Ваш Ответ

2   ответа
7

Undocumented - I haven't found a documentation for it yet). Вы должны немного изменить код. Попробуй это

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
Какая глупая ошибка. ПереехалUnload Me нижеDim заявления и это работает. Спасибо! (Я также добавил несколькоScreenUpdating = False/True линии, чтобы сгладить это немного). Prashant Kumar
0

el 2013 на Windows), только ошибка произошла в подпрограмме модуля, которая была вызвана из пользовательской формы. Если кто-то (например, я) пытается использовать метод workbook.close из подпрограммы / функции в модуле (или другом месте), который не находится внутри самой пользовательской формы, вы не можете использовать «Me». & APOS; Me & APOS; можно использовать только в самом коде UserForm.

Вместо "Разгрузи меня" используйте функцию выгрузки и имя вашей пользовательской формы.

Unload UserFormName

Похожие вопросы