Le classi servono quando devi avere più oggetti simili tra loro ma con proprietà diverse.
Ad esempio, potresti avere una List o Map di oggetti... boh, calciatore. Avresti una classe clsCalciatore; poi:
Dim mapCalciatori
Dim mapCalciatori.Inizialize
Dim Calciatore1 As clsCalciatore
Calciatore1.Initialize
Calciatore1.Nome = "Ugo"
Calciatore1.Cognome = "Ughini"
Calciatore1.Ruolo = "Centrocampista"
mapCalciatori.Put("Ughini", Calciatore1)
Dim Calciatore2 As clsCalciatore
Calciatore2.Initialize
Calciatore2.Nome = "Frengo"
Calciatore2.Cognome = "Freghini"
Calciatore2.Ruolo = "Attaccante"
mapCalciatori.Put("Frengo", Calciatore2)
Per utilizzare delle sub (soprattutto funzioni, ovvero che restituiscano valori) di uso generale, di solito si usano i moduli di codice (ad esempio potrei averne uno per tutto ciò che riguarda SQLite), oppure una UNICA istanza di una classe, una variabile pubblica a disposizione di tutto il resto del progetto.
Dipende molto da ciò che vuoi ottenere, comunque.
Con i moduli normali callsub2 non funziona, va solo con Activity e classi.
Le Sub dei moduli puoi chiamarle semplicemente con NomeModulo.NomeSub. Stessa cosa con le variabili-oggetto, eh: NomeVariabileOggetto.NomeSub.
Non so per quale motivo tu abbia dovuto usare CallSub2.