ave populus,
ho bisogno di recuperare dei dati da un db di AS400 in Excel, ho utilizzato i seguenti 2 metodi il primo con il driver ODBC iSeries Access ed il secondo via DSN:
codice:
Sub estrai()
    Dim a As Range
    Set a = ActiveSheet.Range("A4")
    Dim b As Range
    Set b = ActiveSheet.Range("B4")
    Dim c As Range
    Set c = ActiveSheet.Range("C4")
    Dim d As Range
    Set d = ActiveSheet.Range("D4")
    Dim e As Range
    Set e = ActiveSheet.Range("E4")
    Foglio1.Range("F4:IV65536").Clear
            With ActiveSheet.QueryTables.Add(Connection:= _
                "ODBC;Driver=iSeries Access ODBC Driver;
 Server=192.168.xxx.xxx; Uid=xxx; 
Pwd=xxx; System=xxx;" _
                , Destination:=Range("IT4"))
                .CommandText = Array( _
                "select CPCO,CUMV, QGF2RXG from MERSY.rxGIGI0f where cart='" & CInt(a) & "' and carv='"
 & CInt(b) & "' AND TAAD='"
 & CInt(c) & "' AND TMMI='"
 & CInt(d) & "' AND TGGM='" & CInt(e) & "'" _
                )
                .Name = "Ricerca..."
                .FieldNames = True
                .RowNumbers = False
                .FillAdjacentFormulas = False
                .PreserveFormatting = True
                .RefreshOnFileOpen = False
                .BackgroundQuery = True
                .RefreshStyle = xlInsertDeleteCells
                .SavePassword = True
                .SaveData = True
                .AdjustColumnWidth = False
                .RefreshPeriod = 0
                .PreserveColumnInfo = True
                .Refresh BackgroundQuery = False
            End With
End Sub
codice:
Sub estrai()
    Dim a As Range
    Set a = ActiveSheet.Range("A4")
    Dim b As Range
    Set b = ActiveSheet.Range("B4")
    Dim c As Range
    Set c = ActiveSheet.Range("C4")
    Dim d As Range
    Set d = ActiveSheet.Range("D4")
    Dim e As Range
    Set e = ActiveSheet.Range("E4")
    Foglio1.Range("F4:IV65536").Clear
            With ActiveSheet.QueryTables.Add(Connection:= _
                "ODBC;Dsn=AS400;" _
                , Destination:=Range("IT4"))
                .CommandText = Array( _
                "select CPCO,CUMV, QGF2RXG from MERSY.rxGIGI0f where cart='" & CInt(a) & "' and carv='"
 & CInt(b) & "' AND TAAD='"
 & CInt(c) & "' AND TMMI='"
 & CInt(d) & "' AND TGGM='" & CInt(e) & "'" _
                )
                .Name = "Ricerca..."
                .FieldNames = True
                .RowNumbers = False
                .FillAdjacentFormulas = False
                .PreserveFormatting = True
                .RefreshOnFileOpen = False
                .BackgroundQuery = True
                .RefreshStyle = xlInsertDeleteCells
                .SavePassword = True
                .SaveData = True
                .AdjustColumnWidth = False
                .RefreshPeriod = 0
                .PreserveColumnInfo = True
                .Refresh BackgroundQuery = False
            End With
End Sub
ebbene, entrambi danno
Errore 1004, errore generale di ODBC
non sò proprio come fare?

P.S. lo stesso codice con una connessione a SqlServer o con una fonte dati a PostgreSQL funziona