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:
In questo caso viene generato un errore (cod. 8002) alla riga MSComm1.PortOpen = True nonostante sia presente l'istruzione On Error GoTo errs .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