Desbordamiento de memoria en código vba excel

Grupo deseo pedirles el favor si me pueden ayudar con lo siguiente:

Necesito hacer una macro como explique la semana pasada de que me realice una sumatoria con posiciones relativas, por cuestiones de desarrollo necesito por seguridad de que se calcule teniendo en cuenta todas las filas de una hoja, por esa razón tome la decisión de hacer un while que vaya desdá la fila 2 hasta la ultima fila de una hoja (1048576) es decir la estructura del desarrollo queda:

While i <= 1048576

   If Cells(i, j)

   End If

i = i + 1

Wend

Pero cuando ejecuto la aplicación la memoria se desborda, como si excel no pudiera hacer la tarea de recorrer todas las filas y recorrer todo el ciclo.

¿Cómo hago para arreglar dicho error?.

Respuesta
1

En vez de hacerlo para todas las filas, podrías hacerlo para todas las filas que contengan datos con:

ultlinea = Sheets("Hoja2").Range("A" & Rows.Count).End(xlUp).Row  

While i <= ultlinea

Deberás editar según necesites los datos en negrita. Para este ejemplo se cuentas las líneas de la columna A de la hoja "Hoja2"

¡Gracias! Muchas gracias, amigo eso era lo que necesitaba, muy amable!, Excelente., no pensé que pudiese arreglar ese inconveniente con dicho código.

Un abrazo desde Colombia!.

1 respuesta más de otro experto

Respuesta
1

.

Buenos días,

En tu código faltan algunas precisiones para que funcione correctamente.

Fíjate en esta variante que hace lo que solicitas:

Sub SumaTodo()
i = 1
j = 1
FilaFinal = ActiveSheet.UsedRange.Rows.Count
'FilaFinal = 1048576 'quitar el apostrofo inicial si es que se desea analizar hasta la última fila del archivo
'  
While i <= FilaFinal
   If Cells(i, j).Value <> 0 Then
        Sumatoria = Sumatoria + Cells(i, j).Value
   End If
i = i + 1
Wend
MsgBox "total es: " & Sumatoria
End Sub

Veras que para el uso de la instrucción Cells debe indicarle el número de fila y columna.

Respecto a cuál es la última línea a considerar, la dejé como variable y hay dos alternativas:

Con la instrucción ActiveSheet. UsedRange. Rows. Count, obtienes la última fila que se hubiera ocupado alguna vez en esa hoja aunque ahora no tuviese datos. Esto da seguridad y además acelera el proceso.

De todos modos, si deseas que revise todas las filas indefectiblemente quita el apostrofo a la segunda instancia de la variable FilaFinal. Desde luego, al operar sobre más de un millón de líneas demorará mucho más que la alternativa que te propuse.

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas