Capisco che non ti piacciano le Map perché non le conosci e sei abituato agli array, ma guarda quanto è più semplice e conciso il codice con la Map.
Cmq, se vuoi usare il tuo codice:
1) non potresti passare l'indice alla routine AvviaJob? In questo modo eviteresti di scorrere tutto l'array;
2) penso che tu abbia volutamente sovraddimensionato l'array (100) non conoscendo a priori quanti ne userai; immagina di creare un server e non sai quanti utenti avrai contemporaneamente: che fai, dim Utenti(1000000) - un milione?
3) non ho capito perché inizializzi il job in due posti diversi, a seconda di due condizioni diverse: se non è inizializzato, lo fai ma lo fai anche se il suo nome è una stringa nulla (?)
Ah si, ho capito adesso, vedendo le ultime righe di Jobdone; allora puoi usare:
If Not(Job(i).IsInitialized) Or Job(i).JobName = "" Then
' qui inizializzi il job
perché la seconda condizione non viene esaminata se già la prima è vera.
Cmq, non farti spaventare da cose nuove, se queste sono semplici. Le map non sono certo complicate:
Le dichiari e inizializzi (una volta per tutte)
Usi Put per aggiungere un elemento (se esiste già viene sovrascritto)
Usi Get per ottenere l'elemento.
Oltre a Get per ottenere l'elemento, puoi usare anche GetValueAt(Indice) ed in questo modo è proprio identico ad un Array.
Hanno il vantaggio che sia la chiave (che corrisponde un po' all'indice dell'Array) sia il valore (che ovviamente corrisponde al valore dell'Array) possono essere di qualunque tipo, a differenza degli Array il cui indice è obbligatoriamente un numero.
Puoi eliminare un elemento, risparmiando memoria, cosa che non puoi fare con un array.
Se, ad esempio, anziché un numero usi un testo come indice (ad esempio, i cognomi e i valori sono oggetti che contengono tutti i dati che corrispondono a quel cognome) puoi vedere le la map contiene quel cognome, usando ContainsKey.
Etc.
Insomma, le map sono molto più potenti degli array e facilissime da usare!