2016-07-13 2 views
3

win32com.client와 관련하여 도움이 필요합니다. 나는 파이썬에서 매크로를 생성하고 엑셀을 사용하는 코드를 가지고 있지만이 코드는 또한 vbascript를 실행하고 싶습니다.Python에서 VBAscript 실행

멋진 의견을 보내 주셔서 감사합니다.

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/)가 도움이 될 수 있습니다. –

답변

1

당신은 Excel의 Application.Run 방법을 사용할 수 있어야합니다 : 다음 사용할 수 있습니다, 당신은 ADO를 참조해야하는 경우

xl.Run "Download_Standard_BOM" 

편집 를 후기 바인딩과 같이 :

Dim cnn As Object 'ADODB.Connection 
Dim rst As Object 'ADODB.Recordset 

Set cnn = CreateObject("ADODB.Connection") 
Set rst = CreateObject("ADODB.Recordset") 

또는 초기 바인딩을 사용하고 VBA 프로젝트에 대한 참조를 추가하십시오.

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

대단히 고맙습니다. 그러나, 지금 나는 참조되지 않는 개체가 있기 때문에 내가 믿는 "정의되지 않은 사용자 정의 유형"을 수신합니다. 내 후속 질문에 신경 쓰지 않는다면 어떻게 파이썬에서 실행할 때 참조를 추가 할 수 있을까요? – phtnm28

+0

Python에서 내 매크로에 대한 참조를 불러올 방법이 있습니까? – phtnm28

+0

자세한 내용은 편집을 참조하십시오. – ThunderFrame