10 Maneiras de acelerar o seu macros
Como as macros do Excel tornam-se cada vez mais robusto e complexo, você pode achar que eles perdem desempenho. Ao discutir macros, a palavra desempenho
Conteúdo
- Cálculos de folha de paragem
- Atualização da tela folha de desativação
- Desligar as atualizações da barra de status
- Video: 5 maneiras de acelerar o metabolismo!
- Dizendo excel para ignorar eventos
- Escondendo quebras de página
- Suspender atualizações da tabela de pivô
- Orientação clara de copiar e colar
- Video: 10 maneiras para vocÊ emagrecer e acelerar o seu metabolismoo pensador
- Usando a instrução com
- Video: como acelerar o windows 7, 8 1 e 10 ao máximo - sem programas
- Evitando o método select
- Limitar viagens para a planilha
cálculos de folha de paragem
Você sabia que cada vez que uma célula que afeta qualquer fórmula em sua planilha for alterado ou manipulado, Excel recalcula a planilha inteira? Em planilhas que têm uma grande quantidade de fórmulas, esse comportamento pode diminuir dramaticamente suas macros.
Você pode usar a propriedade Application.Calculation para dizer Excel para mudar para o modo de cálculo manual. Quando uma pasta de trabalho está no modo de cálculo manual, o livro não irá recalcular até que você acionar explicitamente um cálculo pressionando a tecla F9.
Lugar do Excel no modo de cálculo manual, execute seu código, e depois voltar para o modo de cálculo automático.
Sub Macro1 () Application.Calculation = xlCalculationManual`Place sua macro código hereApplication.Calculation = xlCalculationAutomaticEnd Sub
Definir o modo de cálculo de volta para xlCalculationAutomatic irá acionar automaticamente um novo cálculo da planilha, por isso não há necessidade de pressionar a tecla F9 após as corridas de macro.
atualização da tela folha de desativação
Você pode notar que quando as macros executar, a tela faz uma boa quantidade de cintilação. Esta cintilação é Excel tentar redesenhar a tela para mostrar o estado atual da planilha. Infelizmente, cada vez que Excel redesenha a tela, que ocupa recursos de memória.
Você pode usar a propriedade Application.ScreenUpdating desativar atualizações de tela até que seu macro foi concluída. Desativando a atualização da tela economiza tempo e recursos, permitindo que a sua macro para executar um pouco mais rápido. Após o seu código de macro terminar a execução, você pode girar a tela atualizar novamente.
Sub Macro1 () Application.Calculation = xlCalculationManualApplication.ScreenUpdating = False`Place seu código de macro hereApplication.Calculation = xlCalculationAutomaticApplication.ScreenUpdating = TrueEnd Sub
Depois de definir a propriedade ScreenUpdating volta para True, Excel irá acionar automaticamente um redesenho da tela.
Desligar as atualizações da barra de status
A barra de status Excel, que aparece na parte inferior da janela do Excel, normalmente exibe o progresso de determinadas ações em Excel. Se a sua macro está trabalhando com grandes quantidades de dados, a barra de status irá ocupar alguns recursos.
Video: 5 MANEIRAS de ACELERAR o METABOLISMO!
É importante notar que desligar atualização da tela é separado desligar a exibição da barra de status. A barra de status continuará a ser atualizado mesmo se você desativar atualização da tela. Você pode usar a propriedade Application.DisplayStatusBar para desativar temporariamente quaisquer atualizações da barra de status, melhorando ainda mais o desempenho de sua macro:
Sub Macro1 () Application.Calculation = xlCalculationManualApplication.ScreenUpdating = FalseApplication.DisplayStatusBar = False`Place seu código de macro hereApplication.Calculation = xlCalculationAutomaticApplication.ScreenUpdating = TrueApplication.DisplayStatusBar = TrueEnd Sub
Dizendo Excel para ignorar eventos
Você pode implementar macros como procedimentos de evento, dizendo Excel para executar determinado código quando uma planilha ou pasta de trabalho mudanças.
Às vezes, macros padrão fazer alterações que irão desencadear um procedimento de evento. Por exemplo, se você tem um macro padrão que manipula várias células em Sheet1, cada vez que uma célula em que a folha é alterada, o seu macro tem que fazer uma pausa enquanto o evento Worksheet_Change é executado.
Você pode adicionar outro nível de desempenho impulsionar usando a propriedade EnableEvents para dizer Excel para ignorar eventos, enquanto as corridas de macro.
Defina a propriedade EnableEvents para Falso antes de executar a macro. Após o seu código de macro é terminar a execução, você pode definir a propriedade EnableEvents volta para True.
Sub Macro1 () Application.Calculation = xlCalculationManualApplication.ScreenUpdating = FalseApplication.DisplayStatusBar = FalseApplication.EnableEvents = False`Place seu código de macro hereApplication.Calculation = xlCalculationAutomaticApplication.ScreenUpdating = TrueApplication.DisplayStatusBar = TrueApplication.EnableEvents = TrueEnd Sub
Escondendo quebras de página
Cada vez que seu macro modifica o número de linhas, modifica o número de colunas, ou altera a configuração de página de uma planilha, Excel é forçado a tomar tempo recalcular as quebras de página na folha.
Você pode evitar esse comportamento simplesmente esconder as quebras de página antes de iniciar a sua macro.
Defina a propriedade DisplayPageBreaks folha para Falso para ocultar as quebras de página. Se você quiser continuar a mostrar quebras de página após as corridas macro, defina a propriedade DisplayPageBreaks folha de volta para True.
Sub Macro1 () Application.Calculation = xlCalculationManualApplication.ScreenUpdating = FalseApplication.DisplayStatusBar = FalseApplication.EnableEvents = FalseActivesheet.DisplayPageBreaks = False`Place seu código de macro hereApplication.Calculation = xlCalculationAutomaticApplication.ScreenUpdating = TrueApplication.DisplayStatusBar = TrueApplication.EnableEvents = TrueActivesheet.DisplayPageBreaks = TrueEnd Sub
Suspender atualizações da tabela de pivô
Se seus manipula macro pivô tabelas que contêm grandes fontes de dados, poderá detectar um fraco desempenho quando fazendo coisas como adicionar ou mover campos de articulação dinamicamente.
Você pode melhorar o desempenho do seu macro suspendendo o recálculo da tabela dinâmica até que todas as alterações de campo pivot foram feitas. Basta definir a propriedade PivotTable.ManualUpdate como True adiar recálculo, execute o código de macro, e em seguida, defina a propriedade PivotTable.ManualUpdate volta para Falso para acionar o recálculo.
ActiveSheet.PivotTables sub Macro1 () ("PivotTable1") .ManualUpdate = True`Place seus hereActiveSheet.PivotTables código de macro ("PivotTable1") .ManualUpdate = FalseEnd Sub
Orientação clara de copiar e colar
É importante lembrar que, embora Macro Recorder economiza tempo escrevendo código VBA para você, nem sempre escrever o código mais eficiente. Um bom exemplo é a forma como Macro Recorder captura qualquer ação de copiar e colar você executa durante a gravação.
Video: 10 MANEIRAS PARA VOCÊ EMAGRECER E ACELERAR O SEU METABOLISMOO Pensador
Você pode dar a seus macros um ligeiro impulso por cortar o intermediário e realizando uma cópia direta de uma célula para a célula de destino. Este código alternativo utiliza o argumento de destino para contornar a área de transferência e copiar os conteúdos da célula A1 directamente para a célula B1.
Alcance("A1") .Copy Destino: = Gama ("B1")
Se você precisa copiar apenas valores (não formatação ou fórmulas), você pode melhorar o desempenho ainda mais, evitando o método Copy todos juntos. Basta definir o valor da célula de destino para o mesmo valor encontrado na célula de origem. Este método é de cerca de cerca de 25 vezes mais rápido do que usando o método Copy:
Alcance("B1") .Value = Gama ("A1").Valor
Se você precisa copiar apenas fórmulas de uma célula para outra (não valores ou formatação), você pode definir a fórmula da célula de destino para a mesma fórmula contido na célula de origem:
Alcance("B1") .Formula = Gama ("A1").Fórmula
Usando a instrução Com
Ao gravar macros, muitas vezes você vai manipular o mesmo objeto mais de uma vez. Você pode economizar tempo e melhorar o desempenho usando a instrução Com a executar várias ações em um determinado objeto em um tiro.
A declaração Com utilizados no exemplo a seguir informa ao Excel para aplicar todas as alterações de formatação de uma só vez:
Com Range ("A1") .Font.Bold = True.Italic = True.Underline = xlUnderlineStyleSingleEnd Com
Metendo o hábito de chunking ações em Com declarações não só manter suas macros correr mais rápido, mas também torná-lo mais fácil de ler o código de macro.
Video: Como acelerar o Windows 7, 8 1 e 10 ao máximo - SEM PROGRAMAS
Evitando o método Select
Macro Recorder gosta de usar o método Select para selecionar explicitamente os objetos antes de tomar ações sobre eles. Geralmente não há necessidade de selecionar objetos antes de trabalhar com eles. Na verdade, você pode melhorar drasticamente o desempenho macro por não usar o método Select.
Depois de gravar suas macros, torná-lo um hábito de alterar o código gerado para remover os Selecionar métodos. Neste caso, o código otimizado seria parecido com o seguinte:
Folhas("Sheet1").Alcance("A1") = .FormulaR1C1 "1000"Folhas("Sheet2").Alcance("A1") = .FormulaR1C1 "1000"Folhas("Sheet3").Alcance("A1") = .FormulaR1C1 "1000"
Note que o nada está sendo selecionado. O código simplesmente usa a hierarquia de objetos para aplicar as ações necessárias.
Limitar viagens para a planilha
Outra forma de acelerar seus macros é limitar a quantidade de vezes que você faz referência a dados da planilha em seu código. É sempre menos eficiente para agarrar dados da planilha do que da memória. Ou seja, as macros vai correr muito mais rápido se eles não têm para interagir repetidamente com a planilha.
Por exemplo, o seguinte código simples força VBA para retornar continuamente para Sheets ( “Sheet1”) Range ( “A1”) para obter o número necessário para a comparação que está sendo executada na declaração If.:
Para ReportMonth = 1 Para 12Se Gama ("A1") .Value = ReportMonth ThenMsgBox 1000000 / ReportMonthEnd IfNext ReportMonth
Um método muito mais eficiente é para salvar o valor em Sheets ( “Sheet1”). Range ( “A1”) para uma variável chamada MyMonth. Desta forma, o código faz referência a variável MyMonth em vez da planilha:
Dim MyMonth como IntegerMyMonth = Gama ("A1") .ValueFor ReportMonth = 1 Para 12Se MyMonth = ReportMonth ThenMsgBox 1000000 / ReportMonthEnd IfNext ReportMonth
Considere alavancar variáveis para trabalhar com dados na memória em oposição a referência direta planilhas.