Llamar a un procedimiento almacenado desde VBA
Estimados, buenas tardes, espero puedan ayudarme.
Tengo un problema con una macro, al llamar a un procedimiento almacenado. Deseo pegar los datos obtenidos de este procedimiento en una hoja en blanco de mi libro excel, sin embargo, el procedimiento almacenado, arroja muchas tablas (tiene varias tablas temporales y las muestra mediante select), por tanto quiero primero que todo, esos datos que arroja el procedimiento, pegarlos en una hoja en blanco de excel y segundo, poder identificar las distintas tablas que arroja el procedimiento ya que los datos que requiero, se usarán para completar distintas tablas dinámicas.
Ajunto el código:
Sub CargaDatosEnHoja()
Dim fechainicio As Date
Dim fechafin As Date
Dim fechacliente As Long
Dim fechamen As Long
fechainicio = Hoja15.Cells(1, 2)
fechainicio2 = Format(fechainicio, "YYYYmmDD")
fechafin = Hoja15.Cells(1, 2)
fechafin2 = Format(fechafin, "YYYYmmDD")
'create a connection object
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
'create parameter variable
Dim prm1 As ADODB.Parameter
Dim prm2 As ADODB.Parameter
Dim prm3 As ADODB.Parameter
Dim prm4 As ADODB.Parameter
'create a recordset
Dim rsResponses As ADODB.Recordset
Set rsResponses = New ADODB.Recordset
'create a command to execute stored procedure
Dim cmdSQL As ADODB.Command
Set cmdSQL = New ADODB.Command
'provide the connection string
Dim strConn As String
'Use the SQL Server OLEDB Provider
strConn = "driver={SQL Server};" & _
"server=db-w-spp-07\proteus;uid=fbarros;pwd=Francisco001;database=Analisis_Emel_Compra"
'Open connection
conn.Open strConn
With cmdSQL
.ActiveConnection = conn
.CommandText = "CONTROL_REAL"
.CommandType = adCmdStoredProc
Set prm1 = .CreateParameter("fechalientes", adDBTimeStamp, adParamInput)
.Parameters.Append prm1
.Parameters("fechaclientes").Value = fechaclientes
Set prm2 = .CreateParameter("fechainicio", adDBTimeStamp, adParamInput)
.Parameters.Append prm2
.Parameters("fechainicio").Value = fechainicio
Set prm3 = .CreateParameter("fechafin", adInteger, adParamInput)
.Parameters.Append prm3
.Parameters("fechafin").Value = fechafin
Set prm4 = .CreateParameter("fechamen", adVarWChar, adParamInput, 10)
.Parameters.Append prm4
.Parameters("fechamen").Value = fechamen
End With
Dim fields As String
Dim i As Integer
'copy the result of the stored proc to the second row of the excel sheet
Set rsResponses = cmdSQL.Execute
numero_columnas = rsResponses.fields.Count
' Limpiamos el rango donde dejaremos el resultado en cada hoja
's.Range(s.Cells(primera_fila + 1, primera_columna), s.Cells(primera_fila + 2980, primera_columna + numero_columnas - 1)).ClearContents
's.Range(s.Cells(1, primera_columna), s.Cells(1, primera_columna + numero_columnas - 1)).ClearContents
'Hoja3.Range("A5").CopyFromRecordset rsResponses
's.Range(s.Cells(primera_fila + 1, primera_columna), s.Cells(primera_fila + 1, primera_columna)).CopyFromRecordset rsResponses
' cargamos los headers en cada una de las hojas
'For i = 1 To numero_columnas
' s.Cells(1, primera_columna - 1 + i).Value = rsResponses.fields(i - 1).Name
'Next i
'copy the result of the stored proc to the second row of the excel sheet
Set rsResponses = cmdSQL.Execute
Hoja15.Range(Hoja15.Cells(6, 1), Hoja3.Cells(6000, 300)).ClearContents
Hoja15.Range(Hoja15.Cells(6, 1), Hoja3.Cells(6000, 300)).CopyFromRecordset rsResponses
Hoja15.Range(Hoja15.Cells(2, 5), Hoja3.Cells(6000, 7)).NumberFormat = "0"
Hoja15.Range(Hoja15.Cells(2, 8), Hoja3.Cells(6000, 8)).NumberFormat = "0"
rsResponses.Close
conn.Close
Set rsResponses = Nothing
Set conn = Nothing
Set prm1 = Nothing
Set prm2 = Nothing
Set prm3 = Nothing
Set prm4 = Nothing
End Sub
Espero puedan ayudarme, saludos a todos
Gracias