|
Hola, Tengo el siguiente problema:
Tengo una macro en Basic y Excel y en ella tengo un procedimiento indispensabel que me consolida y categoriza una cantidad relaticamente grande de informacion.
Realizo las conexiones y las consultas satisfactoriamente en resumidas cuentas asi:
Dim cn As Object
' crea un objeto Connection
Set cn = CreateObject("ADODB.Connection")
ruta = ThisWorkbook.Path
fichero = ThisWorkbook.Name
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta & "\" & fichero & ";Extended Properties=""Excel 8.0;HDR=Yes;"""
' variable para al rec de ado
Dim rst As Object
' abre la conexión a la base de datos
cn.Open
' crea un nuevo objeto recordset
Set rst = CreateObject("ADODB.Recordset")
' Ejecuta el sql para llenar el recordset
rst.Open sql, cn
' recorre todo el recordset hasta el final y realizo las acciones que necesito
' cierra y descarga las referencias
On Error Resume Next
rst.Close
cn.Close
Set cn = Nothing
Set rst = Nothing
El problema es que debo ejecutar estas instrucciones n numero de veces dependiendo de determinadas condiciones ya que estan dentro de un ciclo cuyo numero de ejecuciones dependen del grado de detalle que el usuario le quiera dar a la consolidacion que realiza la macro, y en el pero de los casos el ciclo se ejecutara 2880 veces, por lo que la macro no es capaz de correr ya que el equipo se queda sin memoria en un equipo con 512 de RAM y probe en uno con 3G de RAM y tampoco funciona.
Probe sacando del ciclo todas la instrucciones que te mostre anteriormente, excepto:
rst.Open sql, cn
' recorre todo el recordset hasta el final y realizo las acciones que necesito
' cierra y descarga las referencias
On Error Resume Next
rst.Close
ya que estas no pueden ir fuera del ciclo por que precisamente lo que requiero es ejecutar las n veces necesarias una consulta sql distinta, y tampoco funciona.
La conclusion es que ejecutar ese rst.Open la n veces se consume toda la memoria del equipo y pareciese que el rst.Close no lo contraresta.
Te agradezco mucho la atencion prestada y toda la ayuda que me puedas dar
|