2016-10-23 4 views
2

У меня возникла проблема с получением xlwings для запуска макроса из Python. Несмотря на следующий код из документации xlwings, я не могу заставить xlwings выполнять макрос Excel. Например, в книге Excel «Book.xlsm»:Возможная ошибка? xlwings не может запускать макрос Excel?

' in Excel workbook Book.xlsm 
Sub Test() 
    Set ws = Worksheets("ABC") 
    ws.Range("A1").Value = 10 
End Sub 

Этот макрос работает ОК в Excel. Но когда я пытаюсь вызвать этот модуль из Python, он не работает:

# in Python 
import xlwings 

wb = xlwings.Book('C:\\Book.xlsm') 
wb.macro('Test') 
print('done.') 

Нет сообщений об ошибках. Код Python запускается и заканчивается, печатая сообщение «done». но когда я проверяю рабочий лист ABC, ничего не написано. Обратите внимание, что я могу подключиться к этой книге и изменить значения ячеек с помощью xlwings. Я просто не могу заставить его запустить тестовый макрос.

Также обратите внимание, что раньше я использовал гораздо более старые xlwings (до 0.7.0, я думаю), и он запускает мои макросы без проблем. Сейчас я использую версию 0.10.0.

+0

спасаете вы книгу после запуска макроса из Python? Является ли макрос в пространстве имен рабочего листа «ABC» или в пространстве имен книги? – cco

+0

т. Е. Это модуль VBA или нет? –

+0

Да, тестовая подпрограмма находится в модуле VBA. Надеюсь, я прав. Я открываю редактор VBA, затем выбираю Insert Module под названием книги. Подпрограмма Test находится в модуле 1, а не на любом листе. Я попытался с помощью несуществующего имени подпрограммы (например, «XYZ») в Python, такие как: wb.macro («XYZ») но мой код все еще работает и выходит без каких-либо сообщений об ошибках. – Chris

ответ

1

Попробуйте следующее:

В VBA:

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

В питона:

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

Можете ли вы объяснить свой ответ, а не просто сбрасывать код здесь? – Robert

+0

Код настолько прост, что не требует пояснений. Крис прав, когда говорит, что его макрос не запускается и не печатает значение 10 в ячейке «A1». Я хочу сказать, что макрос работает, но когда он получает значение как параметр. – Armando

+0

@Armando. Работает! Недостаток в моей фактической подпрограмме (в которой нет аргументов), я должен добавить фиктивный/неиспользуемый аргумент, чтобы xlwings смог выполнить мой макрос, передав некоторое значение в качестве аргумента. Но это тривиальный вопрос в моем приложении. Еще раз спасибо. – Chris