島野です。補足です。

「引数が多すぎます」の件ですが、こちらでも現象が再現しました。
どうやら「戻り値」を指定する順番に関係あるようです。

  cd.Parameters.Append result     ' 戻り値
  cd.Parameters.Append paramIn    ' 引数1(入力)
  cd.Parameters.Append paramInOut ' 引数2(入出力)
  cd.Parameters.Append paramOut   ' 引数3(出力)

のように、戻り値、引数1、引数2、引数3・・・と、
Command オブジェクトにパラメータを追加する場合は、問題ありませんが、

  cd.Parameters.Append paramIn    ' 引数1(入力)
  cd.Parameters.Append paramInOut ' 引数2(入出力)
  cd.Parameters.Append paramOut   ' 引数3(出力)
  cd.Parameters.Append result     ' 戻り値

のように、順番を替えると「引数が多すぎます」のエラーになりました。
( result が「出力」パラメータとして扱われるようです。)
「「戻り値」パラメータは先頭で Append する必要がある」という明示的な
記述がヘルプに見当たらないのですが、恐らくこれが原因かと思います。

また、CreateParameter の第1引数の名称ですが、必ずしも
SP の引数の名前(パラメータ名)にする必要はありません。
逆に、明示的に NamedParameters(名前付きパラメータ)を True にセット
した場合は、SP のパラメータ名を指定する必要があります。

/*---------------------------------------------------------/
/* パラメータに入力、入出力、出力を持つSP(sp_test4.sql) */
/*---------------------------------------------------------/
create procedure sp_test4( @in integer, @inout integer output, @out integer output )
as
set @inout = @inout * 10
set @out = @in * 10
return @in

' ----------------------------------------------
' 戻り値を取得するサンプル(adotest4.vbs)
' ----------------------------------------------
Main

const adCmdStoredProc = 4
const adInteger = 3
const adParamInput = 1
const adParamOutput = 2
const adParamInputOutput = 3
const adParamReturnValue = 4

Sub Main()
  Dim cn
  Dim cd
  Set cn = CreateObject("ADODB.Connection")
  Set cd = CreateObject("ADODB.Command")
  cn.Open "SERVER=(local);DATABASE=db_test;PROVIDER=SQLOLEDB;", "sa", "passwordpassword"
  cd.CommandText = "sp_test4"
  cd.CommandType = adCmdStoredProc
  Dim paramIn    ' ADODB.Parameter
  Dim paramInOut ' ADODB.Parameter
  Dim paramOut   ' ADODB.Parameter
  Dim result
  Dim value1
  Dim value2
  value1 = 10 ' 初期値
  value2 = 20 ' 初期値
  ' CreateParameter により、Parameter オブジェクトを作成する。
  Set result     = cd.CreateParameter( "戻り値", adInteger, adParamReturnValue )
  Set paramIn    = cd.CreateParameter( "引数1", adInteger, adParamInput, , value1 )
  Set paramInOut = cd.CreateParameter( "引数2", adInteger, adParamInputOutput, , value2 )
  Set paramOut   = cd.CreateParameter( "引数3", adInteger, adParamOutput )

' 名前付きパラメータを利用した場合
'  cd.NamedParameters = True
'  Set result     = cd.CreateParameter( "戻り値", adInteger, adParamReturnValue )
'  Set paramIn    = cd.CreateParameter( "@in", adInteger, adParamInput, , value1 )
'  Set paramInOut = cd.CreateParameter( "@inout", adInteger, adParamInputOutput, , value2 )
'  Set paramOut   = cd.CreateParameter( "@out", adInteger, adParamOutput )

  ' 「戻り値」は常に先頭で Append しなければならないらしい(調査中)
  ' NamedParameters(名前付きパラメータ)を True にセットした場合は、
  ' 2番目以降の Append の順番を変更することができる。
  ' 
  cd.Parameters.Append result     ' 戻り値
  cd.Parameters.Append paramIn    ' 引数1(入力)
  cd.Parameters.Append paramInOut ' 引数2(入出力)
  cd.Parameters.Append paramOut   ' 引数3(出力)
  Set cd.ActiveConnection = cn

  WScript.Echo "<SP 実行前>"
  WScript.Echo result.Name     + ":" + CStr(result.Value)     ' 戻り値
  WScript.Echo paramIn.Name    + ":" + CStr(paramIn.Value)    ' 引数1
  WScript.Echo paramInOut.Name + ":" + CStr(paramInOut.Value) ' 引数2
  WScript.Echo paramOut.Name   + ":" + CStr(paramOut.Value)   ' 引数3

  ' SP を実行
  cd.Execute

  WScript.Echo "<SP 実行後>"
  WScript.Echo result.Name     + ":" + CStr(result.Value)     ' 戻り値
  WScript.Echo paramIn.Name    + ":" + CStr(paramIn.Value)    ' 引数1
  WScript.Echo paramInOut.Name + ":" + CStr(paramInOut.Value) ' 引数2
  WScript.Echo paramOut.Name   + ":" + CStr(paramOut.Value)   ' 引数3

  Set cd.ActiveConnection = Nothing
End Sub

--