Bem,
fernando fernandes
Então, essas variáveis que você precisa em outras rotinas, você não as deve destruir até não precisar mais delas.
Mas acostume-se a sempre destruir aquelas que não são mais necessárias.
'---------------------------------------------------------------------------------------
' Modulo : xlApplication / Módulo
' Rotina : RemoveObjectsFromMemory() / Sub
' Autor : Jefferson Dantas (jefferdantas@gmail.com)
' Data : 07/11/2012 - 16:42
' Revisão : Fernando Fernandes (fernando.fernandes@outlook.com.br)
' Data : 07/01/2013 (mdy)
' Proposta : Remove crap from memory
'---------------------------------------------------------------------------------------
Public Sub RemoveObjectsFromMemory(ParamArray Objects() As Variant)
On Error Resume Next 'Resume next necessario em caso de erro
Dim Counter As Integer
For Counter = 0 To UBound(Objects) Step 1
Select Case TypeName(Objects(Counter))
Case "Boolean"
Objects(Counter) = False
Case "Variant"
If VBA.IsArray(Objects(Counter)) Then Erase Objects(Counter)
Objects(Counter) = Empty
Case "String"
Objects(Counter) = vbNullString
Case "Worksheet"
Set Objects(Counter) = Nothing
Case "Workbook"
Objects(Counter).Close SaveChanges:=False
Set Objects(Counter) = Nothing
Case "Database", "Recordset2", "Recordset"
Objects(Counter).Close
Set Objects(Counter) = Nothing
Case Else
Set Objects(Counter) = Nothing
'Suggestion:
If VBA.IsObject(Objects(Counter)) Then
Set Objects(Counter) = Nothing
Else
Objects(Counter) = Empty
End If
End Select
Next Counter
On Error GoTo 0
End Sub
Mas como foi dito a macro fecha a planilha, então não pude usar.
Como estou na base do projeto, tenho que definir o rumo.
Olhei o uso de memoria que começou com 100m e quando vi estava em 700m no excel.
Como já tinha feito varias coisas, e aberto varias planilha não sei oq chegou a inchar a memoria usada.
Estou tentando definir como e oq liberar da memoria enquanto faço testes das novas macros.
= Nothing
= Empty
deram mensagem de erro
Então fiz testes de definição.
Public ColunO() As Variant
Public ColunD() As Variant
Sub mnmemoria()'usa Arrays publicas
ColunO = Range("A1:FF16000")
ColunD = ColunO
ColunO = ColunD
ColunD = Range("A1:FF16000")
MsgBox "olhe o gerenciador de tarefas novamente"
ColunD = Range("A1:F10")
ColunO = Range("A1:F10")
'ReDim ColunO(1)
'ReDim ColunD(1)
End Sub
Observando o gerenciador de tarefas
Com essa macro,
Ao trocar as seleções, pude perceber que Redim Libera a memoria usada.
A Redefinição de conteúdo tbm libera a memoria usada.
Na minha planilha o uso foi
De 77m para 199m, e depois voltou para 77m novamente.
Então em questão de "Arrays publicas "
Como a quantidade é limitada, e sempre vai existir Redefinição de Conteúdo e Tamanho, não creio ter muitos problemas "acho"
Ao final de processos grandes se pode usar Redim nomeArray(1)
Com variáveis definidas dentro das macros...
Sub arratest()
Dim arr(),arr2()
arr = Range("A1:FF16000")
arr2=arr
MsgBox "olhe o gerenciador de tarefas novamente"
End Sub
Essa macro tbm liberou a memoria no final do processo.
Mas...
Depois de alguns testes, e alguns sobe e desce de uso de memoria,
"SEM FAZER NADA NO Excel"
de 77m o uso de memoria do excel já estava 82M
Ao final do processo, o uso de memoria cai para o nível que estava antes,
mas pouco tempo depois sobe um pouquinho .
Levando a crer que se a planilha ficar aberta horas seguidas com testes e mais testes, ou no uso normal.
Mesmo a memoria sendo liberada das variáveis o uso de memoria vai inchar.
Então, O que infla a memoria usada?
e oq fazer para isso não ocorrer?
tem que fechar e reabrir o excel para liberar memoria?
att
Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.
"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"
Postado : 03/08/2014 2:47 am