I've done it using an ODBC connection to the database and just linking a SHEET in Excel to the SQL Sproc. User can press REFRESH on that linked tab and then cut & paste data that they want (or directly reference the cells from other sheets).
We use parameters too - in a separate "parameters" sheet
Ages since I've done it hence I'm a bit hazy on the details, but it might point you in the right direction. If not ask again and I'll see if I can dig out some details. Its definitely a "string and chewing gum" solution though.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim oActiveWorkbook As Workbook, oNewWorkbook As Workbook
Dim conn, cmd, rs, str As String, i As Integer, strLenguajeAccess As String
Dim strTD As String, strWS As String, intLastCol As Integer, cColName, strDA As String
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "DSN=YourOBC;Description=YourDescription;Trusted_Connection=Yes;APP=YourApp;"
conn.Open
Set rs = CreateObject("ADODB.Recordset")
str = "exec [dbo].[YourStoreProcedure] @Parameter1=N'" & Replace(Trim(Target.Value), "'", "''") & "', @Parameter2=2"
rs.Open str, conn, adOpenStatic, adLockReadOnly
If Not IsEmptyRecordset(rs) Then
Set oActiveWorkbook = ActiveWorkbook
Workbooks.Add
Set oNewWorkbook = ActiveWorkbook
oNewWorkbook.Activate
oNewWorkbook.Application.Visible = False
Sheets(ActiveSheet.Name).Name = "Data"
Sheets(ActiveSheet.Name).Select
ActiveSheet.Range("A1").Select
rs.MoveFirst
i = 0
For Each fld In rs.Fields
oNewWorkbook.ActiveSheet.Cells(1, i + 1).Value = rs.Fields.Item(i).Name
i = i + 1
Next fld
oNewWorkbook.ActiveSheet.Range("A2").CopyFromRecordset rs
With oNewWorkbook
.Application.Visible = True
.Activate
End With
Else
MsgBox "DonΒ΄t open store procedure.", _
vbCritical,
End If
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing