J'ai un problème pour obtenir xlwings pour exécuter une macro à partir de Python. Malgré le code de la documentation de xlwings, je ne peux pas obtenir xlwings pour exécuter une macro Excel. Par exemple, dans le classeur Excel nommé "Book.xlsm":Bug possible? xlwings ne peut pas exécuter une macro Excel?
' in Excel workbook Book.xlsm
Sub Test()
Set ws = Worksheets("ABC")
ws.Range("A1").Value = 10
End Sub
Cette macro s'exécute dans Excel. Mais lorsque j'essaie d'appeler ce module à partir de Python, il échoue:
# in Python
import xlwings
wb = xlwings.Book('C:\\Book.xlsm')
wb.macro('Test')
print('done.')
Aucun message d'erreur. Le code Python s'exécute juste et se termine, en imprimant le message "terminé". mais quand je vérifie la feuille de travail ABC, rien n'est écrit. Veuillez noter que je suis capable de me connecter à ce classeur et de changer les valeurs des cellules en utilisant xlwings. Je ne peux pas l'obtenir pour exécuter la macro Test.
Notez également que j'ai utilisé un xlwings beaucoup plus ancien (avant 0.7.0, je pense) avant et il fonctionne mes macros sans problèmes. J'utilise la version 0.10.0 maintenant.
Êtes-vous d'enregistrer le classeur après avoir exécuté la macro à partir de Python? La macro est-elle dans l'espace de noms de la feuille de calcul "ABC" ou dans l'espace de nom du classeur? – cco
est-ce que c'est dans un module VBA ou non? –
Oui, le sous-programme de test est dans un module VBA. J'espère avoir raison. J'ouvre l'éditeur VBA, puis choisissez Insérer un module sous le nom du classeur. La sous-routine de test est dans le Module1, pas dans n'importe quelle feuille de calcul. Je essayé d'utiliser un nom de sous-programme inexistant (comme « XYZ ») en Python, tels que: wb.macro (XYZ) mais mon code fonctionne toujours et sort sans aucun message d'erreur. – Chris