Sono mortificato: hai perfettamente ragione! Eppure - lo giuro - il programma ha iniziato a funzionare benissimo soltanto quando ho scritto If (Y = 1) = True. Con la forma If (Y = 1) = True, facendo elaborare una riga alla volta, nella finestra di "controllo immediato", digitando
? Y = 1
...risultava:
False
Poi mi sono ricordato di aver letto da qualche parte (ma non ricordo dove) che, a differenza delle versioni precedenti di VB, in fase di controlli If ... Then, il compilatore VB.NET converte automaticamente il valore dell'espressione IF in booleano e ricordavo che True non è =1 (oppure False non è =0, non ricordo bene).
Rimane da chiedersi perché diavolo il programma ha iniziato a funzionare bene soltanto con If (Y = 1) = True. Ora funziona indifferentemente con entrambe le versioni. Mah...
Per quanto riguarda l' "uscita" da For ... Next, hai ancora (potevi dubitarne?) ragione tu: a parte l'errore concettuale (all'uscita, il valore di J era più alto di quello che mi serviva e avrebbe comunque comportato un errore) l'errore segnalato - e che impedisce del tutto l'inizio dell'elebaorazione - è J non dichiarato: Non è accessibile a causa del livello di protezione. Tra l'altro, procedendo un'istruzione alla volta nella versione funzionante, all'uscita del ciclo For J posizionando il mouse su J, il compilatore addirittura si rifiuta di fornire il valore, nemmeno null o simile!
Visual Basic 5 (da cui provengo) mi aveva viziato, nel senso che accettava tali ineleganze. Cosa che VB.NET non lascia passare.
Grazie ancora per i consigli.