Running Excel Macro from Python
To Run a Excel Marcro from python, You don't need almost nothing. Below a script that does the job. The advantage of Updating data from a macro inside Excel is that you immediatly see the result. You don't have to save or close the workbook first. I use this methode to update real-time stock quotes. It is fast and stable. This is just an example, but you can do anything with macros inside Excel.
from os import system, path import win32com.client as win32 from time import sleep def isWorkbookOpen(xlPath, xlFileName): SeachXl = xlPath + "~$" + xlFileName if path.exists(SeachXl): return True else: return False def xlRunMacro(macroLink): PathFile = macroLink[0] xlMacro = macroLink[1] isLinkReady = False # Create the link with the open existing workbook win32.pythoncom.CoInitialize() xl = win32.Dispatch("Excel.Application") try: wb = win32.GetObject(PathFile) isLinkReady = True except: NoteToAdd = 'Can not create the link with ' + PathFile print(NoteToAdd) if isLinkReady: # If the link with the workbook exist, then run the Excel macro try: xl.Application.Run(xlMacro) except: NoteToAdd = 'Running Excel Macro ' + xlMacro + ' failed !!!' print(NoteToAdd) del xl def mainProgam(macroSettings): FullMacroLink = [] PathFile = macroSettings[0] + macroSettings[1] FullMacroLink.append(PathFile) FullModuleSubrout = macroSettings[1] + '!' + macroSettings[2] + '.' + macroSettings[3] FullMacroLink.append(FullModuleSubrout) if isWorkbookOpen(macroSettings[0], macroSettings[1]) == False: # If the workbook is not open, Open workbook first. system(f'start excel.exe "{PathFile}"') # Give some time to start up Excel sleep(2) xlRunMacro(FullMacroLink) def main(): macroSettings = [] # The settings below will execute the macro example xlPath = r'C:\test\\' # Change add your needs macroSettings.append(xlPath) workbookName = 'Example.xlsm' # Change add your needs macroSettings.append(workbookName) xlModule = "Updates" # Change add your needs macroSettings.append(xlModule) xlSubroutine = "UpdateCurrentTime" # Change add your needs macroSettings.append(xlSubroutine) mainProgam(macroSettings) if __name__ == "__main__": main() exit()
VBA Excel Macro
Option Explicit Sub UpdateCurrentTime() Dim sht As Worksheet Set sht = ThisWorkbook.Sheets("Current-Time") With sht sht.Cells(2, 1).Value = Format(Now(), "hh:mm:ss") End With End Sub

You can use it also as a dynamic module too. Save the module above as RunExcelMacro.py in Your python project. After just use the following lines:
from RunExcelMacro import mainProgam mainProgram(macroSettings)
It will do the job, succes ...