如何使用Excel VBA字符串中的参数运行存储过程?

如何使用Excel VBA字符串中的参数运行存储过程?,excel,vba,stored-procedures,Excel,Vba,Stored Procedures,我正在尝试使用VBA从Excel运行存储过程,但以下代码出现“类型不匹配”错误。我是否可以执行一个存储过程,将参数作为字符串传递给命令对象,如下所示 函数存储过程() 将cnn设置为新的ADODB.连接 将rst设置为新ADODB.Recordset Dim cmd作为ADODB.Command Dim ConnectionString作为字符串 作为字符串的Dim StrSproc ConnectionString=“Provider=SQLOLEDB;数据源=DBSource;”&_ “初始

我正在尝试使用VBA从Excel运行存储过程,但以下代码出现“类型不匹配”错误。我是否可以执行一个存储过程,将参数作为字符串传递给命令对象,如下所示

函数存储过程()
将cnn设置为新的ADODB.连接
将rst设置为新ADODB.Recordset
Dim cmd作为ADODB.Command
Dim ConnectionString作为字符串
作为字符串的Dim StrSproc
ConnectionString=“Provider=SQLOLEDB;数据源=DBSource;”&_
“初始目录=当前数据库;”&_
“集成安全=SSPI;”
'打开与数据库的连接
开放连接字符串
'执行整个查询的超时错误(秒);这将运行15分钟
'在VBA超时之前,但您的数据库可能在此值之前超时
cnn.CommandTimeout=900
StrSproc=“EXEC StoredProcedure”和_
“@parameter1=0,&”_
“@parameter2=0,&”_
@parameter3=0
Application.StatusBar=“正在运行存储过程…”
设置rst=cmd.Execute(,StrSproc)
端函数
试试这个:

选项显式
函数存储过程()
将cnn设置为新的ADODB.连接
将rst设置为新ADODB.Recordset
Dim cmd作为ADODB.Command
作为字符串的Dim cnnStr
将Rs设置为新ADODB.Recordset
作为字符串的Dim StrSproc
cnnStr=“Provider=SQLOLEDB;Data Source=DBSource;”&“Initial Catalog=CurrentDb;”&_
“集成安全=SSPI;”
与美国有线电视新闻网
.CommandTimeout=900
.ConnectionString=cnnStr
打开
以
使用cmd
.ActiveConnection=cnn
.CommandType=adCmdStoredProc
.CommandText=“[StoredProcedureName]”
.Parameters.Append.CreateParameter(“@parameter1”,adInteger,adParamInput,0)
.Parameters.Append.CreateParameter(“@parameter2”,adInteger,adParamInput,0)
.Parameters.Append.CreateParameter(“@parameter2”,adInteger,adParamInput,0)
以
用Rs
.CursorType=adOpenStatic
.CursorLocation=adUseClient
.LockType=adlockType
.opencmd
以
Application.StatusBar=“正在运行存储过程…”
设置rst=cmd.Execute
端函数

这是我的首选方法:

函数存储过程()
将cnn设置为ADODB.Connection
将rst设置为ADODB.Recordset
Dim cmd作为ADODB.Command
Dim ConnectionString作为字符串
作为字符串的Dim StrSproc
设置cnn=newadodb.Connection
cnn.ConnectionString=“Provider=SQLOLEDB;数据源=DBSource;”&_
“初始目录=当前数据库;”&_
“集成安全=SSPI;”
'打开与数据库的连接
转到SQL\u ConnectionError时出错
开放连接字符串
错误转到0
'执行整个查询的超时错误(秒);这将在VBA超时之前运行15分钟,但您的数据库可能在此值之前超时
cnn.CommandTimeout=900
Set rst=新的ADODB.Connection
StrSproc=“将nocount设置为on;”
StrSproc=StrSproc&“EXEC StoredProcedure”&_
“@parameter1=0,&”_
“@parameter2=0,&”_
“@parameter3=0”
rst.ActiveConnection=cnn
On错误转到SQL_语句错误
rst.打开StrSproc
错误转到0
如果不是rst.EOF和rst.BOF,则
存储过程=IIF(IsNull(rst.Fields(0).Value),“(空白)”,rst.Fields(0).Value)
恩迪夫
退出功能
SQL\u连接错误:
Msgbox“连接到服务器/数据库时出错。请检查连接字符串。”
退出功能
SQL_语句错误:
Msgbox“SQL语法错误。请检查StrSproc。”
调试。打印StrSproc
退出功能
端函数

试试看,让我知道你的想法。

你的问题在哪里?在哪一行抛出异常?错误消息是什么?
.ActiveConnection=cnn
抛出对象变量或未设置块变量。但可能是我的连接字符串错误:/n如果我不想直接使用
OLEDB
,而是数据库,该怎么办?