Как запустить Excel VBA / Macro из Python - PullRequest
2 голосов
/ 20 сентября 2019

Я пытаюсь запустить макрос VBA в книге xlsm, используя python 3.7 в Spyder.Эта рабочая тетрадь состоит из двух рабочих листов.

Код, который у меня есть, в настоящий момент запускается и сохраняет новый файл без проблем, однако он не вызывает VBA, как должно.

Я знаю, что этот макрос работает, потому что, если я вручную нажимаю кнопку в Excel, он работает просто отлично.

Может ли кто-нибудь помочь с этим?Я проверил настройки макроса в центре управления безопасностью, и все макросы включены, поэтому я не считаю, что это проблема с разрешениями, однако я не являюсь администратором на этом компьютере.

Код ниже:

import os
import win32com.client

xl = win32com.client.Dispatch("Excel.Application")
wb = xl.Workbooks.Open("Z:\FolderName\FolderName2\FileName.xlsm")
xl.Application.Run("MacroName")
wb.SaveAs("Z:\FolderName\FolderName2\FileName1.xlsm")
wb.Close()
xl.Quit()

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Это можно легко сделать через xlwings.Как только я переключился на эту библиотеку, я смог быстро заставить этот скрипт работать.

0 голосов
/ 20 сентября 2019

Вам также нужно указать имя модуля


Пример здесь мой код VBA под Module1

Option Explicit
Public Sub Example()
    MsgBox "Hello 0m3r"
End Sub

а вот и мой питон


from win32com.client import Dispatch


def run_excel_macro():
    try:
        excel = Dispatch("Excel.Application")
        excel.Visible = True
        workbook = excel.Workbooks.Open(
            r"D:\Documents\Book1.xlsm")

        workbook.Application.Run("Module1.Example")
        workbook.SaveAs(r"D:\Documents\Book5.xlsm")
        excel.Quit()
    except IOError:
        print("Error")


if __name__ == "__main__":
    run_excel_macro()
...