Название: Прекращена работа Microsoft Excel Отправлено: RVL от 25.04.2018, 15:48:36 Доброго всем!
Сломал всю голову, не откажите в помощи. Начальные условия: Windows 7 / Office 2016 Суть проблемы: есть скрипт vbs, который CreateObject создает новый процесс Excel (важен именно новый процесс), отрывает нужную книгу, в которой находится и исполняется код, и запрещает через .IgnoreRemoteRequests открывать в этом же процессе другие книги. Проблем с открытием и работой макросов нет. НО! когда книга закрывается (через кнопку на форме), это неизбежно ведет к (https://khlebalin.files.wordpress.com/2017/05/1.jpg?w=240) С другой стороны, когда открытие книги происходит не через скрипт, а просто кликаньем по ней, то с закрытием никаких вопросов не возникает, все протекает в штатном режиме. Код на закрытие самый простой: ThisWorkbook.Close False. Поиски решений: 1. пробовал через Application.Quit - не помогает: 2. пробовал искать процесс через GetObject, присваивать Set'ом, а потом .Quit - не помогает; 3. пробовал убирать .IgnoreRemoteRequests и остальные свойства Application - тоже не помогает; 4. убивать процесс через Shell - самая крайняя мера, если уж никаких вариантов. Плюс, сам .IgnoreRemoteRequests странно себя ведет: в True устанавливается, но в False не возвращается, хотя в коде перед закрытием книги стоит .IgnoreRemoteRequests = False. Приходится перед закрытием запускать другой vbs, в котором CreateObject("Excel.Application"), .IgnoreRemoteRequests = False, .Quit. Друзья, надеюсь на вас и уповаю! :) Заранее спасибо! Название: Re:Прекращена работа Microsoft Excel Отправлено: Дмитрий Щербаков(The_Prist) от 25.04.2018, 16:16:02 Код на закрытие самый простой: ThisWorkbook.Close False не очень понимаю. Если открываете процесс через vbs - то какой может быть потом ThisWorkbook.Close? Почему не закрывать процесс теми средствами, коими он был создан?Название: Re:Прекращена работа Microsoft Excel Отправлено: RVL от 03.05.2018, 17:08:56 В общем, все само заработало, ничего не исправлял. Я так и не понял, в чем была проблема. Дмитрий, с ThisWorkbook.Close работает, ошибка прекратилась. Почему Вы решили, что этот метод не имеет права на жизнь, ведь это ссылка на книгу, в которой находится и выполняется код. Соответственно, он закрывает именно тут книгу, которую нужно. Не пойму только, почему .IgnoreRemoteRequests = False не применяется перед закрытием, не пойму.
Название: Re:Прекращена работа Microsoft Excel Отправлено: Дмитрий Щербаков(The_Prist) от 04.05.2018, 13:09:22 Почему Вы решили, что этот метод не имеет права на жизнь Я не писал, что он не имеет права на жизнь. Я спросил, почему не закрывать книгу тем же vbs?в коде перед закрытием книги стоит .IgnoreRemoteRequests = False Вы ставите это свойство в True из vbs, а вернуть хотите уже из Excel. Это и может быть причиной.Попробуйте из VBS просто открыть книгу, из него же выполнить код(тем же Run) и закрыть книгу с отключением всего нужного из этого же VBS. Название: Re:Прекращена работа Microsoft Excel Отправлено: RVL от 08.05.2018, 06:54:53 Спасибо за помощь, в принципе я так и сделал: перед закрытием книги запускается .vbs и включает все отключенные свойства Application, т.е. возвращает его в исходное состояние. Но вот в чем была проблема, связанная с выводом ошибки, так и не разобрался, что очень жаль, для общего опыта было бы неплохо. Спасибо за помощь!!!
Название: Re:Прекращена работа Microsoft Excel Отправлено: Дмитрий Щербаков(The_Prist) от 08.05.2018, 09:10:18 перед закрытием книги запускается .vbs и включает все отключенные свойства Application Книгу лучше было бы тоже этим же VBS закрывать. Ошибка может быть из-за того, что процесс удерживается этим самым VBS и не может быть корректно завершен из самого Excel. |