Я пытаюсь запустить файл xls, содержащий несколько листов и макросов (все они написаны в модулях) с помощью python, используя xlwings, но, похоже, у меня возникают проблемы при последовательном выполнении более одного макроса. Я уже пробовал несколько вещей, чтобы решить эту проблему, но пока не смог найти решение:
Вот простой пример моего скрипта xlwings и макросов vba (все они определены в модулях):
Типичный макрос VBA, который я пытаюсь запустить с помощью xlwings, эти макросы используются для очистки некоторого диапазона листа, когда он находит в нем данные:
Sub Clear_data()
Application.ScreenUptating = False
Application.Calculation = xlCalculationAutomatic
last_col = Worksheets("Sheet1").Range("ZZ2").End(xlToLeft).Column
If last_col > 6 Then
Worksheets("Sheet1").Range(Cells(2,7), Cells(6,last_col)).ClearContents
End If
Application.ScreenUptating = False
Application.Calculation = xlCalculationAutomatic
End Sub
Пример скрипта xlwings, который я запускаю:
def clear_sheet1(filename = "", file_location = "") :
# Connection with the xls workbook
fullpathname = os.path.join(file_location,filename)
Workbook = xw.Book(fullpathname)
# Executing the vba macros with xlwings
#1
macro1 = Workbook.macro("NAME_OF_MY_MACRO_1")
macro1()
#2
macro2 = Workbook.macro("NAME_OF_MY_MACRO_2")
macro2()
#3
macro3 = Workbook.macro("NAME_OF_MY_MACRO_3")
macro3()
# Saving and closing the Workbook
Workbook.save()
Workbook.close()
return()
Когда я выполняю все макросы vba в Excel, все работает нормально.
Когда я запускаю свою функцию для выполнения только одного из макросов, все в порядке.
Когда я запускаю свою функцию для последовательного выполнения нескольких макросов (как написано в приведенном ниже примере скрипта), я систематически получаю ошибку VBA 1004. внутри моего второго макроса в строках, где я должен подавить данные, найденные в лист :
Worksheets("Sheet1").Range(Cells(2,7), Cells(6,last_col)).ClearContents
Был бы очень признателен, если бы кто-нибудь поделился своими знаниями по этой проблеме или помог мне найти ошибку в моем коде! Не стесняйтесь обращаться ко мне за более подробной информацией, если это необходимо.
Большое спасибо :)
NB