2017-09-22 4 views
3

Ich habe eine Excel-Tabelle mit einer großen Menge an VBA und Makros, die eine Schaltfläche enthalten.wie vba Makro außerhalb von Excel auszuführen

Wie führe ich VBA-Code in Excel (speziell zum Klicken auf die Schaltfläche und zum Auslösen des onclick -Ereignisses) außerhalb von Excel von Python (zum Beispiel)?

Hinweis: Ich bin bereit, Antworten in verschiedenen Sprachen wie C++, C# oder Java zu nehmen; aber bei weitem würde ich sie in Python bevorzugen, da es reibungsloser mit dem Rest meiner Python-Anwendungen verbinden wird.

Anmerkung 2: Ich Möglicherweise müssen Sie die Excel-Tabelle mit Python manipulieren, eine der Python-Bibliotheken Excel verfügbar

Versionsnummern:

Microsoft Excel Office 365 Version 1708 Build 8431.2079 
python 2.7 

Antwort

1

erweitern auf die dylan ausgezeichnete Antwort: Sie können auch das gleiche erreichen mit das Python xlwings Paket. Im Wesentlichen ist xlwings ein fantastischer Wrapper um pywin32, der die Kontrolle einer Excel-Anwendung mit noch einfacherer Syntax ermöglicht. Der folgende Python-Code sollte dasselbe tun wie der Code aus der Antwort von dylan:

import xlwings as xw 

# Connect to existing workbook containing VBA macro 
wb = xw.Book(r'C:\YourBookHere.xlsm') 

# Run the VBA macro named 'MacroName' 
wb.macro('MacroName')() 
5

Sie können die win32com Bibliothek nutzen zu interagieren COM-Objekte durch Python. Sie können die win32com-Bibliothek mit pip installieren. So habe ich es zumindest gemacht. Im Wesentlichen klicken Sie nicht auf die Schaltfläche in Ihrem Arbeitsblatt, sondern rufen stattdessen die in Ihrem VBA-Code eingebettete Subroutine auf, um auf Ihrem Arbeitsblatt ausgeführt zu werden.

Auch ich habe Python 3.6 dafür verwendet, aber ich glaube, Python 2.7 sollte kompatibel sein. Hier ist ein grundlegender Überblick.

Installieren win32com

öffnen und Eingabeaufforderung und geben:

pip install pypiwin32 

-Code

import win32com.client as win32 

excel = win32.Dispatch("Excel.Application") # create an instance of Excel 
#excel.Visible = 1 #Uncomment this to show Excel working through the code 
book = excel.Workbooks.Open(Filename=r'C:\YourBookHere.xlsm') 
excel.Run("YourBookHere.xlsm!Sheet1.MacroName") # This runs the macro that is on Sheet1 
book.Save() 
book.Close() 
excel.Quit() 

hoffe, das hilft, das ist mein erster Beitrag. Bearbeiten: Gereinigt Dinge ein wenig

0

Darüber hinaus können Sie auch Windows Taskplaner verwenden, um das Ereignis auszulösen. Wenn ein Button-Klick-Ereignis den Code auslöst, können Sie genau das Gleiche tun, indem Sie den Anweisungen im folgenden Link folgen.

https://www.sevenforums.com/tutorials/11949-elevated-program-shortcut-without-uac-prompt-create.html

Außerdem müssen Sie eine Arbeitsmappe-open-Ereignis, so, so etwas wie ...

Private Sub Workbook_Open() 
Msgbox "Welcome to ANALYSIS TABS" 
End Sub