VBA макрос не выполняется, когда сессия пользователя неактивна

Если вкратце, то есть Windows Server. На нем, как служба, запущен скрипт на python. Задача скрипта - запустить макрос, написанный на VBA в Excel. Этот макрос производит определенные расчеты и создает новые файлы.

Питоновский скрипт взаимодействует с макросом с помощью библиотеки pywin32.

import os, os.path
import win32com.client

xl=win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(os.path.abspath("excelsheet.xlsm"), ReadOnly=1)
xl.Application.Run("excelsheet.xlsm!modulename.macroname")

Когда сессия пользователя активна (когда я зашел на сервер, например), макрос отрабатывает корректно. Как только моя сессия падает в спящий режим, строка

xl.Application.Run("excelsheet.xlsm!modulename.macroname")

не отрабатывает и макрос ломается. То есть COM-объект создается (появляется процесс Excel), но расчеты не запускаются и этот процесс не потребляет оперативную память.

Понимаю, что архитектурно такой подход никуда не годится, но мне нужно решение здесь и сейчас, и я не понимаю, в какую сторону копать. Проблема ли это в ролях и разрешениях на сервере или есть какой то иной способ запустить макрос из питона?

Спасибо!


Ответы (1 шт):

Автор решения: rotabor

Возможно, что в настройках безопасности Excel для пользователя, под которым запускается служба, выполнение макросов запрещено (или сопутствующие настройки).

Поэтому зайдите в Windows под этим пользователем и проверьте настройки безопасности. При необходимости разрешите выполнение макросов, добавьте задействованные пути в доверенные расположения.

→ Ссылка