2016-07-13 36 views
3

Ich brauche Hilfe in Bezug auf Win32com.client. Ich habe den Code arbeiten so weit wie das Erstellen des Makros aus Python und Excel verwenden, aber ich möchte, dass dieser Code auch das vbascript ausführen.Ausführen von VBAscript aus Python

Vielen Dank für Ihr wunderbares Feedback!

import pyodbc 

import win32com.client as win32 

xl = win32.gencache.EnsureDispatch('Excel.Application') 
xl.Visible = True 
ss = xl.Workbooks.Add() 
sh = ss.ActiveSheet 

xlmodule = ss.VBProject.VBComponents.Add(1) # vbext_ct_StdModule 

sCode = '''Sub Download_Standard_BOM() 
'Initializes variables 
Dim cnn As New ADODB.Connection 
Dim rst As New ADODB.Recordset 
Dim ConnectionString As String 
Dim StrQuery As String 

    ConnectionString = "Provider=SQLOLEDB; Network Library=dbmssocn;Password=********;User ID=*******;Initial Catalog=**;Data Source=*************;" 

    cnn.Open ConnectionString 

    cnn.CommandTimeout = 900 

    StrQuery = "SELECT * FROM car_search WHERE shop_id = *******" 

    rst.Open StrQuery, cnn 

    Sheets(1).Range("A2").CopyFromRecordset rst 
End Sub''' 

xlmodule.CodeModule.AddFromString(sCode) 
+0

[xlwings] (http://xlwings.org/) kann helfen. –

Antwort

1

Sie sollten in der Lage sein, Excel Application.Run Methode zu verwenden:

xl.Run "Download_Standard_BOM" 

EDIT Wenn Sie ADO verweisen müssen, dann können Sie entweder späte Bindung, wie folgt aus:

Oder frühe Bindung verwenden und einen Verweis auf das VBA-Projekt hinzufügen:

ss.VBProject.References.AddFromGuid "{2A75196C-D9EB-4129-B803-931327F72D5C}", 2, 8 
+0

Vielen Dank das scheint zu versuchen und auszuführen. Jetzt erhalte ich jedoch den "benutzerdefinierten Typ nicht definiert", den ich glaube, weil es ein Objekt gibt, auf das nicht verwiesen wird. Wenn es Ihnen nichts ausmacht, wäre meine Follow-up-Frage, wie füge ich Referenzen bei der Ausführung von Python hinzu? – phtnm28

+0

Gibt es eine Möglichkeit, Referenzen für mein Makro in Python aufzurufen? – phtnm28

+0

Siehe meine Bearbeitung für Details. – ThunderFrame