У меня почему-то есть эта ошибка, когда другое приложение создало книгу Excel, и эта книга не закрывается из Excel. Приложение, создавшее книгу, было заказным приложением SAP. У нас нет доступа к этому приложению, но у нас есть доступ к VBA. Самое безумное - это vba:
myWorkbook.close
Не закрывает книгу и вместо этого сообщает Application Defined or Object Defined error.
В предыдущих версиях Excel вызов myWorkbook.close
приводил к сбою VBA sh но оставьте Excel незатронутым, поэтому я уже знаю, что что-то не так, но не уверен, что ... В любом случае, вот некоторые вещи, которые я пытался обойти проблему:
On Error Resume Next
- просто пропускает закрытие. - Закрытие приложения SAP, которое создало окно / книгу Excel.
- Отправить ключи Alt + F4 - похоже, что отправленные ключи не регистрируются
Application.DisplayAlerts = false
Application.IgnoreRemoteRequests = false
Application.EnableEvents = false
CloseWindow(stdAcc.FromExcel().hwnd)
вызов CloseWindow
функция Win32 API - Используйте
stdAcc.FromExcel().SendMessage(...)
для отправки различных сообщений в окно приложения включая WM_CLOSE
, WM_QUIT
, WM_DESTROY
, ... Это вызвало другое сообщение об ошибке Cannot quit Microsoft Excel.
- Используйте
stdAcc
, чтобы щелкнуть красный крест - не кажется возможным, поскольку, по-видимому, красный крест виртуален и не реализует интерфейс IAccessible ... - Пользователь вручную нажимает на красный пересекать. Это работает, но грустно, что мы не можем это автоматизировать ...
Изменить:
После нескольких часов поиска кода ABAP я наконец наткнулся на как воспроизвести проблему:
$co = New-Object -ComObject "Excel.Sheet"
$co.parent.visible = $True
Это добавит объект листа к текущему активному экземпляру Excel. Теперь вы можете попытаться закрыть книгу, как указано выше, и все параметры не удастся. Вопрос в том, есть ли способ обойти это?