Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python执行VBAscript_Python_Excel_Vba_Win32com - Fatal编程技术网

从Python执行VBAscript

从Python执行VBAscript,python,excel,vba,win32com,Python,Excel,Vba,Win32com,我需要一些关于win32com.client的帮助。我有从Python创建宏和使用Excel的代码,但我希望这段代码也能运行vbascript 谢谢你们的反馈 import pyodbc import win32com.client as win32 xl = win32.gencache.EnsureDispatch('Excel.Application') xl.Visible = True ss = xl.Workbooks.Add() sh = ss.ActiveSheet xlm

我需要一些关于win32com.client的帮助。我有从Python创建宏和使用Excel的代码,但我希望这段代码也能运行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)

您应该能够使用Excel的
应用程序。运行
方法:

xl.Run "Download_Standard_BOM"
编辑 如果需要参考ADO,则可以使用后期绑定,如下所示:

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

可能会有帮助。非常感谢您,您似乎确实尝试并执行了它。但是,现在我收到了“用户定义类型未定义”,我认为这是因为有一个对象没有被引用。如果您不介意的话,我接下来的问题是如何在从Python执行时添加引用?有没有办法在Python中调用宏的引用?谢谢ThunderFrame的帮助,我很快就要结束了,我已经调用了所有需要的引用,但仍然收到一个用户定义的错误,调试指向这段代码。设置cn=CurrentProject.Connection Set rst=New ADODB.Recordset Dim cn As Object:Set cn=CreateObject(“ADODB.Connection”)Dim rst为New ADODB.Recordset Dim Connection String As String更具体地说是ADODB.Recordset,但我引用了“Microsoft ActiveX数据对象记录集…”有什么想法吗?