Notifications
Clear all

Liberar memória do VBA excel.

11 Posts
3 Usuários
0 Reactions
3,507 Visualizações
(@bracinho)
Posts: 0
New Member
Topic starter
 

Pessoal,

O meu projeto funciona bem, porém, as vezes, dependendo do número de janelas e/ou rotinas realizadas sem fechá-lo, aparece a seguinte mensagem:

- Erro de Compilação:
Memoria Insuficiente

Eu li alguns artigos sobre isso e, em todos eles, foi dito que eficiência do computador/memória virtual influência muito nesse erro. No meu caso, tendo em vista que o executo em um core i7, com 8 gigas de Memória, vejo que a necessidade é otimizar o meu projeto.

Existe algum código que, após executar uma determinada rotina, o mesmo limpa/esvazia a memória do Excel VBA?

 
Postado : 26/10/2015 9:14 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Mude os objetos para Nothing
http://blogs.msdn.com/b/ericlippert/arc ... 22259.aspx

Att

 
Postado : 26/10/2015 9:50 am
(@bracinho)
Posts: 0
New Member
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde Bracinho,

Você utiliza "set" no início de alguns códigos?

Se utiliza, tenta matar esses "set's" no final do código.
Exemplo:

Set wsAtivo = thisworkbook.activesheet
...
...
set wsAtivo = nothing

Qualquer coisa da o grito.
Abraço

 
Postado : 26/10/2015 9:52 am
(@bracinho)
Posts: 0
New Member
Topic starter
 

Bernardo,

Eu não costumo utilizar o Set, mas, se isso for a solução, basta fazer a alteração abaixo?

Exemplo:

sub abrir ()

userform1.show

end sub

para:

set abrir ()

userform1.show

set abrir = nothing
 
Postado : 26/10/2015 9:57 am
(@bracinho)
Posts: 0
New Member
Topic starter
 

Bernardo,

Para cada sub do meu projeto, eu inserirei se código?

Exemplo:

Atualmente

sub abrir
userform1.show
end sub

Alterar para:

sub abrir
Dim wsativo
Set wsativo = ThisWorkbook.ActiveSheet
userform1.show
 Set wsativo = Nothing
end sub
 
Postado : 26/10/2015 10:49 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Conforme minha postagem #2 post do seu tópico, é isso mesmo!!!!!!!!!!!!!!!!!!!!
Veja lá, o link que eu postei!

Att

 
Postado : 26/10/2015 10:53 am
(@bracinho)
Posts: 0
New Member
Topic starter
 

Alexandre,

O seu link esta em inglês e, por conta disso, não consegui entender perfeitamente.

Por favor, explica-me como usá-lo.

 
Postado : 26/10/2015 11:10 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Apensa como foi postado, todo objeto criado deve ser "eliminado" da memoria, a estrutura Nothing é usada para limpar objetos de variáveis.

Ex:

Sub ObjectTest()
'Fonte:http://dailydoseofexcel.com/archives/2004/06/07/nothing-keyword/

    Dim oObj As Object
    MsgBox oObj Is Nothing
    'Will return true.  An object variable has been dimensioned,
    'but it doesn’t point to any object because the code hasn’t
    '”set” it to any object.
    
    Set oObj = ThisWorkbook '->>>> Criou o objeto
    MsgBox oObj Is Nothing
    'Will return false.  oObj points to an object and therefore
    'is not nothing.
    
    Set oObj = Nothing      '->>>> Destruiu o objeto
    MsgBox oObj Is Nothing
    'Will return true.  It is possible to set an object variable
    'to nothing to release memory.
    
End Sub

Att

 
Postado : 26/10/2015 2:42 pm
(@nelson-s)
Posts: 0
New Member
 

Será que seu problema é somente liberar memória das variáveis objeto? Pode ser que haja outros problemas, mas isso você só vai saber testando...

 
Postado : 26/10/2015 3:07 pm
(@bracinho)
Posts: 0
New Member
Topic starter
 

Boa tarde!!

Apensa como foi postado, todo objeto criado deve ser "eliminado" da memoria, a estrutura Nothing é usada para limpar objetos de variáveis.

Ex:

Sub ObjectTest()
'Fonte:http://dailydoseofexcel.com/archives/2004/06/07/nothing-keyword/

    Dim oObj As Object
    MsgBox oObj Is Nothing
    'Will return true.  An object variable has been dimensioned,
    'but it doesn’t point to any object because the code hasn’t
    '”set” it to any object.
    
    Set oObj = ThisWorkbook '->>>> Criou o objeto
    MsgBox oObj Is Nothing
    'Will return false.  oObj points to an object and therefore
    'is not nothing.
    
    Set oObj = Nothing      '->>>> Destruiu o objeto
    MsgBox oObj Is Nothing
    'Will return true.  It is possible to set an object variable
    'to nothing to release memory.
    
End Sub

Att

Alexandre,

ok, agradeço a sua ajuda.

 
Postado : 27/10/2015 8:07 am