Как передать аргументы из xlwings в макрос VBA Excel?

Я просматривал Как мне вызвать Excel макрос из Python с использованием xlwings?, и я понимаю, что он не полностью поддерживается, но я хотел бы знать, есть ли способ сделать это.

некоторым нравится:

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

person jvaldiviezo    schedule 24.02.2016    source источник


Ответы (1)


Это можно сделать, сделав то, что вы предлагаете. Однако имейте в виду, что это решение не будет кросс-платформенным (Win/Mac). Я работаю в Windows, поэтому ниже нужно настроить appscript на Mac. http://docs.xlwings.org/en/stable/missing_features.html

Сценарий VBA можно вызвать следующим образом:

linked_wb.xl_workbook.Application.Run("vba_script", variable_to_pass)

Пример. Допустим, у вас есть список строк, которые следует использовать в списке проверки данных в Excel.

Питон:

from xlwings import Workbook

linked_wb = Workbook.caller()

animals = ['cat', 'dog', 'snake', 'bird']
animal_list = ""
for animal in animals:
    animal_list += animal + "|"

linked_wb.xl_workbook.Application.Run("create_validation", animal_list)

Эксель VBA:

Public Sub create_validation(validation_list)
    Dim validation_split() As String

    validation_split = Split(validation_list, "|")

    'The drop-down validation can only be created with 1-dimension array.
    'We get 1-D from the Split above
    With Sheet1.Range("A1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:=Join(validation_split, ",")
    End With
End Sub
person Daniel Sjödin    schedule 05.03.2016
comment
Спасибо Даниил!!! Это было больше, чем я ожидал. Это то, что я искал. - person jvaldiviezo; 07.03.2016