Il problema si è risolto semplicemente eliminando la seconda parentesi graffa da sinistra della strSql.
Ecco il codice che mi ha permesso la corretta funzionalità:

codice:
Public Function ControllaCFBrasile(cf As String, tipo As String, msgErr As String) As Integer

    strSql = "{?=call sial_gestione_lav_esterni.ctrl_codice_fiscale(?,?,?)}"

    Set Com = this.ISIALApplication_SIALDatabase.command
    With Com
        .CommandText = strSql
        .CommandType = adCmdText
        .Parameters.Append .CreateParameter("RetVal", adInteger, 1, adParamReturnValue)
        .Parameters.Append .CreateParameter("i_codice_fiscale", adVarChar, adParamInput, 30, Trim(cf))
        .Parameters.Append .CreateParameter("i_tipo", adVarChar, adParamInput, 3, tipo)
        .Parameters.Append .CreateParameter("o_msg_err", adVarChar, adParamOutput, 1000, msgErr)
        .Execute
    End With

    ControllaCFBrasile = Com("RetVal").Value
    msgErr = Iif IsNull(Com("msgErr").Value, "", Com ("msgErr").Value)
    
End Function