If you plan on using this frequently I would rewrite the macro code in python+xlwings. This removes the issue of running things from other workbooks and will let you run it on multiple files at once by just adding looping logic:
macro.py
import os
import sys
import xlwings as xw
from os import listdir
from os.path import isfile, join
def python_macro(wb_path, app):
#Optionally verify that files are all xls*, csv, or directory files
wb = app.books.open(wb_path)
sheet = wb.sheets.active
#Rewrite macro in python+xlwings below
print(sheet.range('A1').value)
with xw.App() as app:
for arg in sys.argv[1:]:
path = join(os.getcwd(), arg)
if os.path.isdir(path):
#Optionally process further subdirectories
files = [f for f in listdir(path) if isfile(join(path, f))]
for file in files:
python_macro(file, app)
elif os.path.isfile(path):
python_macro(path, app)
Save the file in the same directory as the report files and running it would look like this:
python macro.py reportthatneedswork.csv anotherreport.csv report-sub-dir
From what I could find, there isn't really a way to execute external workbook macros with xlwings. The closest thing I found was using win32com to extract and move over the vb script then you could use xlwing to open it an run the macro. However, this is particularly overkill for your scenario. It will be much easier to deal with if you just rewrite the macro in python.
Read VBA from workbook and then 'inject' it into another sheet.