从Excel运行存储的过程

我正试图从Excel运行存储的过程。 我知道如何做到这一点,而不使用dynamicdate,但我需要date范围是dynamic的。

Sub TestStoredProcedure() Dim CServer As String Dim CDatabase As String Dim CLogon As String Dim CPass As String Dim StartDate As Date Dim EndDate As Date Dim TStartDate As String Dim TEndDate As String CServer = "111111" ' Your server name here CDatabase = "111111" ' Your database name here CLogon = "11111111" ' your logon here CPass = "111111" ' your password here Dim Cmd1 As New ADODB.Command Dim rs As New ADODB.Recordset Dim intTemp As Integer Set Cmd1 = New ADODB.Command Cmd1.ActiveConnection = cn Cmd1.CommandText = "callstatisticsbyQ" Cmd1.CommandType = adCmdStoredProc Cmd1.Parameters.Refresh Cmd1.Parameters(0).Value = Worksheets("Sheet2").Range("A1") Cmd1.Parameters(1).Value = Worksheets("Sheet2").Range("A2") Cmd1.Parameters(2).Value = Worksheets("Sheet2").Range("A3") Set rs = Cmd1.Execute() rs.Open Cmd1 Worksheets("Procedure Export").Range("A1").CopyFromRecordset rs Call DumpSP("prcGetData", "", "", Worksheets("Procedure Export").Range("A1")) End Sub 

我得到一个错误,说一些关于用户定义types没有定义

要使用ADO,请在VBA IDE中单击工具 – >引用,并勾选“Microsoft ActiveX数据对象” – 最好是其最高版本。

此外,您使用cn作为连接,但它没有定义在该子(假设它不是全局),您可能需要Set Cmd1.ActiveConnection = cn

也看看这个 ,它提前定义了input( 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