Ошибка при закрытии открытой книги в пользовательской форме VBA

В подпрограмме я хочу открыть книгу, прочитать ее и закрыть.
По какой-то причине я получаю сообщение об ошибке:

Run-time error '1004': Method 'Close' of object _Workbook failed 

Я определил минимальный фрагмент кода, чтобы воспроизвести проблему.
Создайте новый файл excel. В нем создайте Userform. При этом создайте кнопку Command со следующим кодом события 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, если это имеет значение.

Да, в Excel 2011 это ошибка ( Undocumented – пока я еще не нашел документацию ). Вы должны слегка изменить код. Попробуй это

 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 

У меня была эта точная проблема в Excel 11 на Mac (отлично работает Excel 2013 в Windows), только ошибка произошла в модуле sub, который был вызван из UserForm. Если кто-то (например, я) пытается использовать метод workbook.close из суб / функции в модуле (или другом месте), который не находится внутри самого UserForm, вы не можете использовать «Me». «Me» используется только в самом коде UserForm.

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

 Unload UserFormName 
  • VBA открывает / закрывает книги по ошибкам MAC-бросков
  • excel vba Удалить всю строку, если ячейка содержит поиск GREP
  • Флажок не работает с mac
  • ошибка времени выполнения 1004 в excel 2010 Обновить BackgroundQuery
  • Проверка флажка на основе листа.
  • Excel Mac 2016 vba fill.Userpicture из диапазона
  • IF LOOP в функции VBA
  • Запустите поиск Google с VBA Macro на Mac
  • Mac Excel 2016 «Ошибка времени выполнения» 429: компонент ActiveX не может создать объект "
  • Не удается открыть код VBA на Excel Mac 2011
  • Удалить всю строку на основе соответствия?
  • Interesting Posts

    Чтение проблемы в ячейке из Excel с помощью Apache POI

    Не удается подключиться к Excel Connection Manager – странное поведение SSIS, которое я когда-либо видел

    Как найти окончательный отчет в крупном проекте

    Как составить таблицу продаж для коллекций предметов, которые продаются отдельно?

    VBA Ссылаясь на именованный диапазон

    В C #, как использовать Excel Interop для ускорения записи нескольких значений ячейки

    Matplotlib: Импорт и построение нескольких временных рядов с легендами прямо из .csv

    Почему XSLX-файл загружается как XLS только в IE?

    VBA – копирование данных с одного листа на другой

    Excel VBA UDF автоматически исправляет ошибку

    вопрос о формулах, применяемых к дате / времени

    Импорт таблицы данных из файла Excel и ее отображение в онлайновой форме с использованием VBScript и HTML

    Экспорт R вывода в Excel

    Сравнение и обновление листа в Excel с использованием VBA

    Как читать и писать один и тот же лист Excel в Jmeter?

    Давайте будем гением компьютера.