Habrás solucionado tu problema pero al final nadie te ha explicado otra que has pedido crear subprocedimientos... ya te lo explico yo...
Sea que tienes un código de 40.000 líneas o las que sean ejemplo:
-   
-   public sub elProcedimiento() 
-       codigo linea 1  
-       codigo linea 2 
-         . 
-         . 
-         . 
-      codigo linea 39999 
-      codigo linea 40000 
-   end sub 
-   
-   
pués se trata de añadir un módulo (menú proyecto añadir módulo) o más...
y hacer algo como esto:
-   
-   public sub elProcedimiento()  'esto sería la función inicial 
-       call codigo1_10000 
-       call codigo10001_20000 
-       call codigo20001_30000 
-       call codigo30001_40000 
-   end sub 
-   
- ' este otro código iría en el módulo añadido 
-   public sub codigo1_10000 
-       codigo linea 1  
-       codigo linea 2 
-         . 
-         . 
-         . 
-      codigo linea 9999 
-      codigo linea 10000 
-   end sub 
-   public sub codigo10001_20000 
-        codigo linea 10001  
-        codigo linea 10002 
-         . 
-         . 
-         . 
-      codigo linea 19999 
-      codigo linea 20000 
-   end sub 
-   public sub codigo20001_30000 
-         .... 
-   end sub 
-   public sub codigo30001_40000 
-       .... ídem 
-   end sub 
-   
-   
Como ves hemos dividido el código en 4 rutinas con nombre sin significado alguno, a fin de que te quede más claro... 
Lo lógico no es partir el código arbitrariamente por cualquier línea, sino hacerlo por 'tareas'... supongamos que tu código varias veces toma una cadena, busca algo en ella y si lo encuentra lo remplaza por otra, pués esa funcionalidad es una tarea específica que puede ser despejada a un módulo como una función, que por ejemplo podría llamarse remplazar_Cadena  ahora revisando todo tu código cada vez que hagas esa dentro de ella deberías sustituirlo por algo como lo siguiente:
-   
-     call remplazar_Cadena(cadenaOriginal, CadenaABuscar, ramplazo) 
-   
-   
Naturalmente antes habría que haber trasladado el código  que hace esa tarea al módulo que sería algo como esto:
-   
-    public sub remplazar_Cadena(byref cadenaOrigen as string, buscar as string, remplazarCon as string) 
-        código que busca la cadena y lo remplaza... 
-    end sub 
-   
-   
Cuando trabajas en un módulo se debe tener en cuenta el ámbito de las variables, esto es el 'alcance'. todas las variables de una función son reconocidas dentro de la función, pero una variable que es 'local' a una función no es accesible desde otra función, cuando se necesita disponer de variables accesibles desde diferentes funciones, hay que declaralas públicas en un módulo algo así como 
-   
-    public estaVariable as integer 
-    public otraVariable as string 
-    public unaMatriz() as byte 
-   
-   
Estas variables así declaradas en un módulo estarán disponibles en el formulario y por tanto podrás usarlas en todas las funciones..
Cuando sales de una función, todas las variables declaradas dentro de la función son borradas, al acceder nuevamente a la función las variables son nuevamente creadas, con el valor que les des, si no les das valor tomarán el que les es propio por fecto (0 para las numéricas, "" para los strings, etc..). entonces si quieres que una función 'recuerde' una variable entre llamadas, esto es que no la borre al salir de la función hay que declararla como Static, ejemplo:
-   
-     ' este ejemplo siempre la variable acumulador pierde su valor 
-     public function Sumar( valor as integer) as long 
-         dim acumulador as long   ' cada vez que entre acumulador vale 0 
-         
-         acumulador=acumulador  + valor 
-         sumar=acumulador 'cuando salga acumulador dejará de existir 
-   end function 
-   
-   ' en este ejemplo la variable acumulador guarda su valor.. 
-    public function Sumar( valor as integer) as long 
-         static acumulador as long   ' cada vez que entre acumulador vale lo que valía la última vez que se salió 
-        
-         acumulador=acumulador  + valor 
-         sumar=acumulador 'cuando salga acumulador seguirá existiendo  
-   end function 
-   
-   
por último indicarte que desde un módulo para acceder a los controles situados en el formulario, deberás indicar además del nombre del control también el nombre del formulario, de otro modo no lo reconocerá, ejemplo: si tenía text1.text="Mi casa" desde un módulo tendrás que indicarlo así: Form1.text1.text="Mi casa" (form1 es el nombre que le hayas dado al formulario). Si tienes que usar muchas veces 'form1' en vez de usarlo cada vez puedes abreviarlo así: 
-   
-     public sub Sumar(valor as integer) 
-        static acumulador as long 
-         with form1 
-               .text1.text= acumulador + valor 
-               .command1.enabled=true 
-         end with 
-     end sub 
-   
-   
observa que se escribe with nombreDelFormulario y se cierra con un 'end nombredelformulario' y nota que cada control referenciado lleva delante de su nombre un punto.
Saludos.