Чтобы использовать ADO, щелкните Сервис-> ссылки в IDE VBA и отметьте «Объекты данных Microsoft ActiveX» - желательно их наивысшую версию.
Кроме того, вы используете cn
в качестве соединения, но оно не определено в этой подпрограмме (при условии, что оно не является глобальным), и вам может понадобиться Set Cmd1.ActiveConnection = cn
.
Также взгляните на это , оно заранее определяет входные (adParaminput
) параметры вместо использования .Refresh
, что довольно неэффективно (отправляется на сервер)
Обновить, например, :
rem for create procedure callstatisticsbyQ (@i int, @c varchar(10)) as select 1234;
Dim cn As ADODB.Connection
Dim Cmd1 As ADODB.Command
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set Cmd1 = New ADODB.Command
Set Cmd1 = New ADODB.Command
cn.Open "Provider=SQLNCLI10;Server=1.2.3.4;Database=x;Uid=x; Pwd=x;"
Set Cmd1.ActiveConnection = cn
Cmd1.CommandText = "callstatisticsbyQ"
Cmd1.CommandType = adCmdStoredProc
Cmd1.Parameters.Append Cmd1.CreateParameter("p1", adInteger, adParamInput, , Worksheets("Sheet2").Range("A1"))
Cmd1.Parameters.Append Cmd1.CreateParameter("p2", adVarChar, adParamInput, 20, Worksheets("Sheet2").Range("A2"))
Set rs = Cmd1.Execute()
MsgBox rs(0)
rs.Close
cn.Close