Professional Documents
Culture Documents
muito importante quando se desenvolve alguma macro, que o tempo de execuo no seja exagerado, e at porque, as folhas de calculo tm normalmente diversos clculos, objectos, formataes, etc, o que pode tornar as aces mais lentas.
Mensagens Recentes
Existem no entanto pequenos truques que permitem melhorar reduzir o tempo de execuo das macros e melhorar o aspecto visual quando estas correm. Application.ScreenUpdating Esta propriedade define se o Excel actualiza ou no a folha de clculo. Por defeito est definida como verdadeira (True), mas podemos defini-la como falsa (False). Por exemplo, se queremos apagar algumas linhas ou colunas individualmente, sempre que damos uma ordem para eliminar, a folha actualizada, aumentando o tempo de execuo. Se definirmos Application.ScreenUpdating = False, s quando voltarmos a definir Application.ScreenUpdating = True, que a folha actualizada, reduzindo significativamente o tempo de execuo e o aspecto geral da macro. No seguinte exemplo, s aps o cdigo terminar, a folha ser actualizada: Sub DeleteColumns() Application.ScreenUpdating = False Range("c:c").Delete Range("b:b").Delete Range("a:a").Delete Application.ScreenUpdating = True End Sub
Operador Like
Apr 04, 2013 Este poder parecer um artigo bastante simples sobre Visual Basic e at na verdade, mas a realidade que muito programadores ou aspirantes a programadores de Visual Basic... Continue >>
Application.Calculation A propriedade Calculation permite definir de que forma so feitos os clculos. Sempre que escrevemos um valor numa clula, o Excel actualiza todos os clculos, em todas as clulas, o que poder levar algum tempo. Por defeito esta propriedade est definida como automtica (xlCalculationAutomatic) mas podemos no entanto definir para no ser executada, ou seja, para manual (xlCalculationManual). Por exemplo, e para testarmos esta opo, se tivermos na colunas A, B, C, D, E e F todas as clulas com uma formula para gerar um nmero aleatrio - =Rand() -, sempre que escrevermos um valor numa clula, iro ser actualizadas todas as formulas. No seguinte exemplo ser desabilitado enquanto o ciclo estiver a ser executado, e poder testar com e sem o desabilitar dos clculos automticos, para ver a diferena.
Tags
Access 2003 (1) ASP.NET
(11)
Noticias (47)
www.jorgepaulino.com/2009/09/excel-dicas-de-vba-performance.html
1/4
23/10/13
Sub WriteValues() Dim x As Integer
tambm a premiar os autores dos trs melhores artigos, dado o sucesso nas edies anteriores. E os leitores devem dar a... Continue >>
VB.NET
(73) VB6 (8) VBA (28) Visual Studio 2005 (46) Visual Studio 2008
(30) Visual Studio 2010 (17) V isual Studio 2012 (1) XML
Literals (4)
Blogs/Pginas Amigos
Caio Proiete (M VP ASP.NET) Nuno Gomes (M VP ASP.NET) Niko Neugebauer (M VP SQL Server) Jorge Rodrigues (M VP Excel) Nuno Godinho (M VP ASP.NET) Pedro Perfeito (M VP SQL Server) Paulo M orgado (M VP C#) Andr Lage (M VP Sharepoint) Nuno M ota (M VP Exchange) Sara Silva (M VP C#) Lus Abreu (M VP ASP.NET) Jorge M oura (M VP Desktop Experience) Sandro Pereira (M VP Biztalk) Fabio Domingos Excel User M aria do Cu Proiete (Office)
End Sub Application.EnableEvents Com explicado num artigo anterior, existem diversos eventos que esto disponveis no Excel. Esses eventos podem executar operaes demoradas e isso pode no ser desejado. Por defeito esta propriedade est definida como verdadeira (True) mas podemos desactivar quando queremos que os eventos no aconteam. Imagine que no evento Change, que executado sempre que algum valor seja alterado, temos um ciclo demorado. Private Sub Worksheet_Change(ByVal Target As Range) Dim x As Integer For x = 0 To 1000 Debug.Print(x) Next End Sub Com a opo Application.EnableEvents = True, sempre que escrever um valor em qualquer clula, ir correr tambm o cdigo anterior. Definindo esta propriedade como falsa, Application.EnableEvents = False, far com que apenas se execute o nosso cdigo e no os restantes eventos do documento. Sub Run() Application.EnableEvents = False For x = 1 To 100 Cells(x, "g").Value = x Next Application.EnableEvents = True End Sub
Subscrever Novidades
Endereo de Email:
Subscrever
Delivered by FeedBurner
Seguidores
Aderir a este site.
com o Google Rede Social
Isoladamente ou em conjunto, estas trs propriedades permitem melhorar significativamente o tempo de execuo de uma macro e com isso tornar a nossa folha de clculo mais atractiva. NOTA: preciso ter algum cuidado com a utilizao destas propriedades, e garantir que so sempre repostas para as definies originais, correndo-se o risco de a folha no trabalhar como est planeado. Se colocarmos, por exemplo, a propriedade Application.EnableEvents = False e no voltarmos a colocar a True, todos os eventos ficaram congelados. Para breve mais dicas de como melhorar o cdigo em VBA!
Pgina teis
M SDN Portugal Visual Basic Team Blog ASP.NET Pgina Oficial
7 comentrios:
Pedro Costa disse...
www.jorgepaulino.com/2009/09/excel-dicas-de-vba-performance.html
2/4
23/10/13
o Application.EnableEvents no conhecia. Estamos sempre a aprender. No entanto parece-me que a sua utilidade resume-se a quando temos cdigo para eventos, como o que mostras-te (Worsheet_Change). Ou estarei enganado? o Application.ScreenUpdating no tem s a utilidade de acelerar o processo como tambm de ser mais agradvel ao utilizador, sem que este esteja a ver coisas, possivelmente estranhas, a acontecerem rapidamente. Em conjunto com o Application.Statusbar bastante bom. Alis apesar de no provocar qualquer tipo de melhoria de performance verdadeiramente (na verdade at pode tirar alguma, mas de forma negligencivel), o Application.Statusbar pode at dar a iluso de ser mais rpido se oferecer informaes do que est a fazer ou do que falta ainda fazer. Bastante til em processos muito demorados. Exemplo: Application.statusbar = "A processar registo " & actual & " de " & total No esquecer de no final colocar: Application.Statusbar = False para fazer o reset para defeito. No h nada de mais frustrante que ter um processo demorado e no saber se bloqueou ou se ainda falta muito. O tempo pode ser o mesmo mas psicologicamente parece mais. J agora sou MetalFatigue do P@P. J me tens dado umas valentes ajudas em VBA :) Principalmente ao inicio quando eu era ainda um maarico nisto. Cumprimentos
12 Outubr o, 2009
Histrico
Histrico
jpaulino disse... >> No entanto parece-me que a sua utilidade resume-se a quando temos cdigo para eventos, como o que mostras-te (Worsheet_Change). O EnableEvents = False serve para que os eventos no "disparem", e isso poder reduzir bastante o tempo de execuo. No falei no Application.StatusBar porque no est relacionado com performance. >> J agora sou MetalFatigue do P@P. J me tens dado umas valentes ajudas em VBA :) Ainda bem que tenho ajudado e para breve mais alguns artigos sobre VBA. Fica prometido! Um abrao Jorge Paulino
12 Outubr o, 2009
Pedro Costa disse... >>No falei no Application.StatusBar porque no est relacionado com performance. Sim eu compreendi era s uma pequena dica. Pois tal como disse no tem ganho real. O ganho ilusrio. >>>Ainda bem que tenho ajudado e para breve mais alguns artigos sobre VBA. Fica prometido! No prometas que eu at prefiro .NET (C# ou VB). No entanto por razes profissionais sou obrigado a estar mais por dentro de VBA, infelizmente para mim.
12 Outubr o, 2009
www.jorgepaulino.com/2009/09/excel-dicas-de-vba-performance.html
3/4
23/10/13
Annimo disse...
Pessoal, poderia apresentar uma pequena macro para uso de teste em clula formatada em vermelho?
10 Dezembr o, 2011
Jorge Paulino disse... Ol, No entendi qual o objectivo. Pode dar mais detalhes?
14 Dezembr o, 2011
Annimo disse... Ol boa tarde. Algum sabe como inserir um valor por defeito num textbox no vba excel? agradeo
16 Mar o, 2013
Enviar um comentrio
Planilhas de Excel Prontas com Vdeo Tutoriais. Cadastre-se Agora! Mensagem mais recente Mensagem antiga
2009 Visual Basic em Portugus, Using the StudioPress WordPress Theme Bloggerized by Girly Blogger for BTemplates. Full RSS - Comments RSS vbtuga{at}gmail.com
www.jorgepaulino.com/2009/09/excel-dicas-de-vba-performance.html
4/4