2016-10-14 7 views
2

Раньше я использовал информацию в этом вопросе для запуска скрипта VBA, который выполняет некоторое базовое форматирование после запуска моего кода на Python.Как вызвать скрипт Excel VBA с помощью xlwings v0.10

How do I call an Excel macro from Python using xlwings?

В частности, я использовал первое обновление.

from xlwings import Workbook, Application 
wb = Workbook(...) 
Application(wb).xl_app.Run("your_macro") 

Теперь я использую v0.10.0 из xlwings, и этот код больше не работает.

При попытке предложенный новый код для v0.10.0:

wb.app.macro('your_macro') 

Python возвращает объект:

<xlwings.main.Macro at 0x92d3198> 

и мой макрос не работает в Excel.

В документации (http://docs.xlwings.org/en/stable/api.html#xlwings.App.macro) есть пример, который является настраиваемой функцией, но у меня есть сценарий, который выполняет несколько операций в Excel (форматирует данные, которые я выводил из python, добавлял некоторые формулы на листе и т. Д.), Которые я хочу бежать.

Уверен, что у меня отсутствует что-то основное.

Update на основе предложения Феликса Zumstein, я попробовал:

import xlwings as xw 
xlfile = 'model.xlsm' 
wb = xw.Book(xlfile) 
wb.macro('your_macro') 

Это возвращает то же самое, как wb.app.macro ('your_macro'):

<xlwings.main.Macro at 0x92d05888> 

и нет Сценарий VBA выполняется внутри Excel.

ответ

2

Вам необходимо использовать Book.macro. Как говорится в вашей ссылке на документы, App.macro предназначен только для макросов, которые не являются частью книги (то есть добавлений). Так что используйте:

your_macro = wb.macro('your_macro') # this maps the VBA code 
your_macro() # only this executes the VBA code 
+0

я получаю тот же результат, когда я использую ББ.макросъемки ('your_macro). – Budd

+1

вот мой код: – Budd

+0

Вы можете отправить мне образец книги (письмо на GitHub), и я буду изучать его. –

0

Может быть, вы столкнулись с подобной ситуацией, как один указанные здесь: Possible bug? xlwings cannot run an Excel macro?

По некоторым причинам макросов не работает должным образом, когда они не Получать что-то в качестве параметра. Хотя этот параметр не используется в макросе VBA, необходим параметр.

Пример: Ниже VBA и код питон может не работать:

Sub Test() 
    Set ws = Worksheets("Hoja1") 
    ws.Range("A1").Value = 10 
End Sub 

код Python:

import xlwings as xw 
wb1 = xw.Book('Libro1.xlsm')  
macro=wb1.macro('Test') 
print('done.') 

Таким образом, вы должны сделать соответствующие изменения.

VBA код: Код

Sub Test(number) 
Set ws = Worksheets("Hoja1") 
ws.Range("A1").Value = 10 
End Sub 

Python:

import xlwings as xw 
wb1 = xw.Book('Libro1.xlsm')  
macro=wb1.macro('Test') 
macro(10) #here value 10 is the dummy parameter sended to the vba macro 
print('done.') 
+0

Как и мой другой комментарий по другому вопросу: это не обязательно. Пожалуйста, откройте вопрос о GH, чтобы разрешить его правильно. –