Цель состоит в том, чтобы иметь повторно используемую функцию python, которая вызывает с помощью win32.com макрос из VBA Excel и делает это с помощью **kwargs
или другого метода, который может передавать неизвестное количество аргументов.
НетВ конкретных вопросах использовались **kwargs
и явный win32.com, хотя были найдены некоторые похожие вопросы, но ни на один из них ответы не были приняты, даже если они не совсем похожи.
Ниже приведены некоторые похожие, но не похожие вопросы:
с использованием python
def run_vba_macro(str_path, str_modulename, str_macroname, **kwargs):
if os.path.exists(str_path):
xl=win32com.client.DispatchEx("Excel.Application")
wb=xl.Workbooks.Open(str_path, ReadOnly=0)
xl.Visible = True
if kwargs:
xl.Application.Run(os.path.basename(str_path)+"!"+str_modulename+'.'+str_macroname,
**kwargs)
else:
xl.Application.Run(os.path.basename(str_path)
+"!"+str_modulename
+'.'+str_macroname)
wb.Close(SaveChanges=0)
xl.Application.Quit()
del xl
#example
kwargs={'str_file':r'blablab'}
run_vba_macro(r'D:\arch_v14.xlsm',
str_modulename="Module1",
str_macroname='macro1',
**kwargs)
#other example
kwargs={'arg1':1,'arg2':2}
run_vba_macro(r'D:\arch_v14.xlsm',
str_modulename="Module1",
str_macroname='macro_other',
**kwargs)
с VBA
Sub macro1(ParamArray args() as Variant)
MsgBox("success the str_file argument was passed as =" & args(0))
End Sub
Sub macro_other(ParamArray args() as Variant)
MsgBox("success the arguments have passed as =" & str(args(0)) & " and " & str(args(1)))
End Sub
Ожидаемый результат - MessageBox в VBA:
- success аргумент str_file передан как = blablab
- success аргументы переданы как = 1 и 2