Allora metti nel form un timer e setta la proprietà Interval a 100.
L' istruzione cmdAS400Lib.Execute la metti in una sub che chiami
DoQuery. Dichiara blResp come boolean. Dichiara l'api Sleep

codice:
Dim blResp As Boolean
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Sub DoQuery()
    blResp = False
    cn.Execute
    blResp = True
End Sub

Private Sub Timer1_Timer()
    Timer1.Enabled = False
    DoQuery
End Sub

Private Sub Command1_Click()
Dim TimeCount As Long
    TimeCount = 0
    Timer1.Enabled = True
    Do While True
        DoEvents
        Sleep 500
        Time Count = TimeCount + 500
        If TimeCount > 5000 Then Exit Do
        If blResp Then Exit Do
    Loop
    If blResp Then
        ' Fai qualcosa con il risultato della query  
    Else
        ' Stoppi la connessione   
        Set cn = Nothing 
        ' Dai la segnalazione di errore 
        MsgBox "Errore di Time Out ......." 
    End If
End Sub
Il meccanismo è questo :

1) Al click sul bottone, parte il Timer
2) Subito dopo la tua applicazione entra nel ciclo Do while
3) Dopo un decimo di secondo il Timer si stoppa e lancia DoQuery
che in questo modo è asincrona al ciclo.
4) Intanto il ciclo conta i millisecondi grazie a Sleep
5) Se la execute della query risponde, il valore di blResp è true
ed il ciclo lo scopre e termina
6) Altrimenti il ciclo termina comunque dopo 5 secondi
7) Testi blResp per comportarti di conseguenza

Le mie prove danno esito positivo. Prova anche tu e fammi sapere.

Ciao,