Miren se tiene una aplicacion en VBA, viene siendo algo asi como un sistema reporteador. Para que se den una idea:
- Tiene 91 UserForms
- Y 37 Modulos
- Ademas de como 60 hojas
El detalle que el archivo ya pesaba cerca de 50MB, era muy pesado y funcionaba lento, ademas que nos tiraba muchos errores por tener tantos objetos, un ejemplo podira ser en las hojas, como el excel tiene limite de formatos, los reportes llevan su formatito ahora si para que se vean presentables, pero llegaba un momento que te tiraba el error de no permitir mas formato.
Ademas de perder variables cuando antes no se perdian etc, etc...
Entonces nos parecio buena idea Importar Dinamicamnete los USer FOrm, en 4 Grupos principales.
- 17 Primero
- 17 Segundo
- 27 Tercero
- Y 36 Cuarto..
De tal forma que nuestro archivo de 50MB quedo reducio a 3MB, todo ibamuy bien, los formularios se importae conforme los vallas a usar en la aplicacion, para irlo haciendo gradual y que el proceso no fuera lento los dividimos en grupos, lo haciamos individual, pero llegaba la hora que nos tirab el error que se menciona en las lineas de mas abajo, por eso pensamos que en grupos a lo mejor no lo sacaria.
El Detalle es que importo primero 17 a conganas sigue jalando, despues los 36 tobo bien, despues los 27 a con ganas, pero cuando llego los ultimos 17 va se cuelga y se queda trabado, verificando el Administrador de tareas se puede ver el CPU al 100 %... Nota: No necesariamente en ese Orden, podriamos decir que es en cualquier Orden, y por ahi de la Importacion 85 no importando el Orden se cuelga....
Bueno Ahora se cuelga Antes tiraba un error que decia mas omenos que no se podia referenciar el objeto que checaramos un log, checamos el log y esto es lo que aparece: Line 2: Property OleObjectBlob in UserForm could not be set. Lo anterior no es exclusivo de un Form...
La verdad no tengo ni idea, si alguien ha pasado por esto y logro solucionarlo bienvenido, si no me gustaria saber de algun metodo para liberar la memoria Exclusivamente de Excel (Que no se poner en un archivo Mystring=(80000000) por que no me funciona)...
Se que una Solucion es quitar UserFOrms para que no pese tanto, pero estos se ocupan asi, y se tendria que reestrucutrar todo el proyecto, lo cual no es posible, por eso pido si es que se puede alguna alternativa...
Posteo el codigo para importar los user form, si me le ven algun error ps con ganas...
De antemano muchas gracias por la atencion preestada...
Saludos.
Código vb:
Ver original
Sub Importar_UserForm(ByVal sNombre As String, sfCarpeta As SubCarpeta_Formularios) Dim sSubCarpeta As String Dim vbp As Variant Dim i As Integer Dim cont As Integer Dim bBand As Boolean On Error GoTo Importar Set vbp = Workbooks(Constantes.NameSystem).VBProject.VBComponents cont = 0 For i = 1 To vbp.Count cont = cont + 1 If vbp(cont).Type = 3 Then If vbp.Item(cont).Name = sNombre Then bBand = True Exit For End If End If Next '// Aqui escojo como parametro las Carpetas de donde se puede obtener los Forularios Select Case sfCarpeta Case Is = 0 sSubCarpeta = "Carpeta1\" Case Is = 1 sSubCarpeta = "Carpeta2\" Case Is = 2 sSubCarpeta = "Carpeta3\" Case Is = 3 sSubCarpeta = "Carpeta4\" End Select If bBand = False Then sNombre = sNombre & ".frm" Application.VBE.ActiveVBProject.VBComponents.Import Constantes.PathForms & sSubCarpeta & sNombre DoEvents End If Set vbp = Nothing Exit Sub Importar: MsgBox Err.Description