Hola buenas tardes, la explicacion sera un poco larga, para ver si asi me puedo dar a entender mas facilmente.
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 originalSub 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