Per testare esistenza e disponiblilità di una particolare porta, pensavo di impostare il numero della porta da testare (MSComm1.CommPort = n ) e di testarla tentando l'apertura della porta stessa (MSComm1.PortOpen = True ). In questo modo dovrebbe venir restituito un errore nel caso la porta non sia esistente o non sia disponiblie.
Supponiamo che l'unica porta esistente e disponiblie sia la COM 7.
La routine da realizzare dovrebbe quindi testare le porte una per una partendo dalla COM 1, scartare le porte che generano un errore (in questo caso quelle comprese tra la 1 e la 6) e selezionare per la comunicazione la prima porta che non genera un errore (in questo caso la COM 7).

Durante uno dei tentativi che ho effettuato, ho utilizzato On Error ed etichette di riga per realizzare una sorta di loop, come di seguito:


codice:
private sub form_load()

    index = 1
    
    GoTo comportsearch

comportsearch:
    On Error GoTo errs
    MSComm1.commport = index
    MSComm1.PortOpen = True
    Exit Sub

errs:
    index = index + 1
    Err.Clear
    GoTo comportsearch

end sub
In questo caso viene generato un errore (cod. 8002) alla riga MSComm1.PortOpen = True nonostante sia presente l'istruzione On Error GoTo errs .