Notifications
Clear all

Liberar memória do VBA excel.

11 Posts
3 Usuários
0 Reactions
3,516 Visualizações
(@bracinho)
Posts: 69
Trusted 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
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

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

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/10/2015 9:50 am
(@bracinho)
Posts: 69
Trusted Member
Fernando Fernandes
(@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

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/10/2015 9:52 am
(@bracinho)
Posts: 69
Trusted 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: 69
Trusted 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
Fernando Fernandes
(@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

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/10/2015 10:53 am
(@bracinho)
Posts: 69
Trusted 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
Fernando Fernandes
(@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

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/10/2015 2:42 pm
(@nelson-s)
Posts: 96
Trusted 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: 69
Trusted 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