Новости:

Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе ХИТРОСТИ

Главное меню

Прекращена работа Microsoft Excel

Автор RVL, 25.04.2018, 15:48:36

« назад - далее »

RVL

Доброго всем!
Сломал всю голову, не откажите в помощи.
Начальные условия: Windows 7 / Office 2016
Суть проблемы: есть скрипт vbs, который CreateObject создает новый процесс Excel (важен именно новый процесс), отрывает нужную книгу, в которой находится и исполняется код, и запрещает через .IgnoreRemoteRequests открывать в этом же процессе другие книги. Проблем с открытием и работой макросов нет. НО! когда книга закрывается (через кнопку на форме), это неизбежно ведет к



С другой стороны, когда открытие книги происходит не через скрипт, а просто кликаньем по ней, то с закрытием никаких вопросов не возникает, все протекает в штатном режиме. Код на закрытие самый простой: 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.

Друзья, надеюсь на вас и уповаю! :)
Заранее спасибо!

Дмитрий Щербаков(The_Prist)

Цитата: RVL от 25.04.2018, 15:48:36Код на закрытие самый простой: ThisWorkbook.Close False
не очень понимаю. Если открываете процесс через vbs - то какой может быть потом ThisWorkbook.Close? Почему не закрывать процесс теми средствами, коими он был создан?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453

RVL

В общем, все само заработало, ничего не исправлял. Я так и не понял, в чем была проблема. Дмитрий, с ThisWorkbook.Close работает, ошибка прекратилась. Почему Вы решили, что этот метод не имеет права на жизнь, ведь это ссылка на книгу, в которой находится и выполняется код. Соответственно, он закрывает именно тут книгу, которую нужно. Не пойму только, почему .IgnoreRemoteRequests = False не применяется перед закрытием, не пойму.

Дмитрий Щербаков(The_Prist)

Цитата: RVL от 03.05.2018, 17:08:56Почему Вы решили, что этот метод не имеет права на жизнь
Я не писал, что он не имеет права на жизнь. Я спросил, почему не закрывать книгу тем же vbs?
Цитата: Дмитрий Щербаков(The_Prist) от 25.04.2018, 16:16:02в коде перед закрытием книги стоит .IgnoreRemoteRequests = False
Вы ставите это свойство в True из vbs, а вернуть хотите уже из Excel. Это и может быть причиной.
Попробуйте из VBS просто открыть книгу, из него же выполнить код(тем же Run) и закрыть книгу с отключением всего нужного из этого же VBS.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453

RVL

Спасибо за помощь, в принципе я так и сделал: перед закрытием книги запускается .vbs и включает все отключенные свойства Application, т.е. возвращает его в исходное состояние. Но вот в чем была проблема, связанная с выводом ошибки, так и не разобрался, что очень жаль, для общего опыта было бы неплохо. Спасибо за помощь!!!

Дмитрий Щербаков(The_Prist)

Цитата: RVL от 08.05.2018, 06:54:53перед закрытием книги запускается .vbs и включает все отключенные свойства Application
Книгу лучше было бы тоже этим же VBS закрывать. Ошибка может быть из-за того, что процесс удерживается этим самым VBS и не может быть корректно завершен из самого Excel.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453