Smartsheet 9.1.1
Smartsheet é uma plataforma de trabalho dinâmica que permite gerenciar projetos, criar fluxos de trabalho e colaborar com sua equipe.
À medida que suas macros do Excel se tornam cada vez mais robustas e complexas, você pode descobrir que elas perdem desempenho. Ao discutir macros, a palavra desempenho geralmente é sinônimo de velocidade . Velocidade é a rapidez com que seus procedimentos VBA executam as tarefas pretendidas. A seguir estão dez maneiras de ajudar a manter as macros do Excel em execução em seu nível de desempenho ideal.
Você sabia que cada vez que uma célula que afeta qualquer fórmula em sua planilha é alterada ou manipulada, o Excel recalcula a planilha inteira? Em planilhas que possuem uma grande quantidade de fórmulas, esse comportamento pode tornar drasticamente as macros mais lentas.
Você pode usar a propriedade Application.Calculation para informar ao Excel para alternar para o modo de cálculo manual. Quando uma pasta de trabalho está no modo de cálculo manual, ela não será recalculada até que você acione explicitamente um cálculo pressionando a tecla F9.
Coloque o Excel no modo de cálculo manual, execute seu código e, em seguida, volte ao modo de cálculo automático.
Sub Macro1 () Application.Calculation = xlCalculationManual 'Coloque seu código de macro aqui Application.Calculation = xlCalculationAutomatic End Sub
Definir o modo de cálculo de volta para xlCalculationAutomatic acionará automaticamente um recálculo da planilha, portanto, não há necessidade de pressionar a tecla F9 após a execução da macro.
Você pode notar que, quando suas macros são executadas, sua tela pisca bastante. Essa cintilação é o Excel tentando redesenhar a tela para mostrar o estado atual da planilha. Infelizmente, cada vez que o Excel redesenha a tela, ele consome recursos de memória.
Você pode usar a propriedade Application.ScreenUpdating para desativar as atualizações de tela até que a macro seja concluída. Desativar a atualização da tela economiza tempo e recursos, permitindo que sua macro seja executada um pouco mais rápido. Após o término da execução do código de macro, você pode ativar a atualização da tela novamente.
Sub Macro1 () Application.Calculation = xlCalculationManual Application.ScreenUpdating = False 'Coloque seu código de macro aqui Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub
Depois de definir a propriedade ScreenUpdating de volta para True, o Excel irá automaticamente disparar um redesenho da tela.
A barra de status do Excel, que aparece na parte inferior da janela do Excel, normalmente exibe o andamento de certas ações no Excel. Se sua macro estiver trabalhando com muitos dados, a barra de status ocupará alguns recursos.
É importante observar que desligar a atualização da tela é diferente de desligar a exibição da barra de status. A barra de status continuará a ser atualizada, mesmo se você desativar a 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 = xlCalculationManual Application.ScreenUpdating = False Application.DisplayStatusBar = False 'Coloque seu código de macro aqui Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.DisplayStatusBar = True End Sub
Você pode implementar macros como procedimentos de evento, informando ao Excel para executar determinado código quando uma planilha ou pasta de trabalho for alterada.
Às vezes, as macros padrão fazem alterações que irão disparar um procedimento de evento. Por exemplo, se você tiver uma macro padrão que manipula várias células na Planilha1, cada vez que uma célula nessa planilha for alterada, sua macro deverá pausar enquanto o evento Worksheet_Change é executado.
Você pode adicionar outro nível de aumento de desempenho usando a propriedade EnableEvents para dizer ao Excel para ignorar eventos enquanto sua macro é executada.
Defina a propriedade EnableEvents como False antes de executar sua macro. Após a conclusão da execução do código de macro, você pode definir a propriedade EnableEvents de volta para True.
Sub Macro1 () Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.EnableEvents = False 'Coloque seu código de macro aqui Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.DisplayStatusBar = True Application.EnableEvents = True End Sub
Cada vez que sua macro modifica o número de linhas, modifica o número de colunas ou altera a configuração da página de uma planilha, o Excel é forçado a levar algum tempo para recalcular as quebras de página mostradas na planilha.
Você pode evitar esse comportamento simplesmente ocultando as quebras de página antes de iniciar sua macro.
Defina a propriedade de folha DisplayPageBreaks como False para ocultar quebras de página. Se você deseja continuar a mostrar quebras de página após a execução da macro, defina a propriedade de folha DisplayPageBreaks de volta para True.
Sub Macro1 () Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.EnableEvents = False Activesheet.DisplayPageBreaks = False 'Coloque seu código de macro aqui Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.DisplayStatusBar = True Application.EnableEvents = True Activesheet.DisplayPageBreaks = True End Sub
Se sua macro manipula tabelas dinâmicas que contêm grandes fontes de dados, você pode ter um desempenho ruim ao fazer coisas como adicionar ou mover campos dinamicamente.
Você pode melhorar o desempenho de sua macro suspendendo o recálculo da tabela dinâmica até que todas as alterações do campo dinâmico tenham sido feitas. Basta definir a propriedade PivotTable.ManualUpdate como True para adiar o recálculo, executar seu código de macro e, em seguida, definir a propriedade PivotTable.ManualUpdate novamente como False para acionar o recálculo.
Sub Macro1 () ActiveSheet.PivotTables ("PivotTable1"). ManualUpdate = True 'Coloque seu código de macro aqui ActiveSheet.PivotTables ("PivotTable1"). ManualUpdate = False End Sub
É importante lembrar que, embora o Macro Recorder economize tempo escrevendo código VBA para você, ele nem sempre escreve o código mais eficiente. Um exemplo importante é como o Macro Recorder captura qualquer ação de copiar e colar que você executa durante a gravação.
You can give your macros a slight boost by cutting out the middleman and performing a direct copy from one cell to a destination cell. This alternate code uses the Destination argument to bypass the clipboard and copy the contents of cell A1 directly to cell B1.
Range("A1").Copy Destination:=Range("B1")
If you need to copy only values (not formatting or formulas), you can improve performance even more by avoiding the Copy method all together. Simply set the value of the destination cell to the same value found in the source cell. This method is about approximately 25 times faster than using the Copy method:
Range("B1").Value = Range("A1").Value
Se precisar 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 contida na célula de origem:
Intervalo ("B1"). Fórmula = Intervalo ("A1"). Fórmula
Ao gravar macros, você geralmente manipulará o mesmo objeto mais de uma vez. Você pode economizar tempo e melhorar o desempenho usando a instrução With para executar várias ações em um determinado objeto de uma só vez.
A instrução With utilizada no exemplo a seguir diz ao Excel para aplicar todas as alterações de formatação de uma vez:
Com intervalo ("A1"). Fonte .Bold = True .Italic = True .Underline = xlUnderlineStyleSingle Terminar com
Adquirir o hábito de agrupar ações em instruções With não apenas manterá suas macros rodando mais rapidamente, mas também tornará mais fácil ler seu código de macro.
Macro Recorder gosta de usar o método Select para selecionar explicitamente objetos antes de executar 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 da macro não usando o método Select.
Depois de gravar suas macros, crie o hábito de alterar o código gerado para remover os métodos Select. Nesse caso, o código otimizado seria parecido com o seguinte:
Folhas ("Folha1"). Intervalo ("A1"). FormulaR1C1 = "1000" Folhas ("Folha2"). Intervalo ("A1"). FormulaR1C1 = "1000" Folhas ("Folha3"). Intervalo ("A1"). FormulaR1C1 = "1000"
Observe que nada está sendo selecionado. O código simplesmente usa a hierarquia de objetos para aplicar as ações necessárias.
Outra maneira de acelerar suas macros é limitar a quantidade de vezes que você faz referência aos dados da planilha em seu código. É sempre menos eficiente obter dados da planilha do que da memória. Ou seja, suas macros serão executadas com muito mais rapidez se não precisarem interagir repetidamente com a planilha.
Por exemplo, o código simples a seguir força o VBA a retornar continuamente às Planilhas ("Planilha1"). Intervalo ("A1") para obter o número necessário para a comparação realizada na instrução If:
Para ReportMonth = 1 a 12 If Range ("A1"). Value = ReportMonth Then MsgBox 1000000 / ReportMonth Fim se Próximo ReportMonth
Um método muito mais eficiente é salvar o valor em Planilhas (“Planilha1”). Intervalo (“A1”) para uma variável chamada MeuMês. Dessa forma, o código faz referência à variável MyMonth em vez da planilha:
Dim MyMonth as Integer MyMonth = Range ("A1"). Valor Para ReportMonth = 1 a 12 If MyMonth = ReportMonth Then MsgBox 1000000 / ReportMonth Fim se Próximo ReportMonth
Considere aproveitar variáveis para trabalhar com dados na memória em vez de fazer referência direta a planilhas.
Ao chamar um método ou propriedade de um objeto, ele precisa passar pela interface IDispatch do componente OLE. As chamadas para esses componentes OLE demoram, portanto, reduzir o número de referências a componentes OLE pode melhorar a velocidade do código de macro.
Para a invocação de propriedades ou métodos de objetos, geralmente é utilizado o método de representação de Object.Method , ou seja, o "." símbolo é usado para invocar propriedades e métodos.
Portanto, o número de chamadas de métodos ou propriedades pode ser avaliado de acordo com o número de símbolos ".". Quanto menos "." símbolo, mais rápido o código será executado.
Por exemplo, a instrução a seguir inclui 3 símbolos ".".
ThisWorkbook.Sheet1.Range("A1").Value = 100
A instrução a seguir possui apenas um símbolo ".".
Activewindow.Top = 100
Aqui estão alguns truques para reduzir o número de símbolos "." para correr mais rápido.
Primeiro, quando você precisar se referir ao mesmo objeto repetidamente, poderá definir o objeto como uma variável para reduzir o número de chamadas. Por exemplo, o código a seguir requer duas chamadas por linha.
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = 100
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = 200
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = 300
Como o objeto Sheets("Sheet1") precisa ser referenciado repetidamente, ele pode ser definido como uma variável sht primeiro, de modo que cada código precise ser chamado apenas uma vez.
Set sht = ThisWorkbook.Sheets("Sheet1")
sht.Cells(1, 1) = 100
sht.Cells(2, 1) = 200
sht.Cells(3, 1) = 300
Segundo, se você não quiser declarar uma variável temporária sht, você também pode usar a instrução With mencionada anteriormente. Conforme mostrado no exemplo a seguir:
With ThisWorkbook.Sheets("Sheet1")
.Cells(1, 1) = 100
.Cells(2, 1) = 200
.Cells(3, 1) = 300
End With
Terceiro, quando houver muitos loops, tente manter propriedades e métodos fora do loop. Ao reutilizar um valor de propriedade do mesmo objeto em um loop, você pode primeiro atribuir o valor da propriedade a uma variável especificada fora do loop e, em seguida, usar a variável no loop, o que pode atingir uma velocidade mais rápida. Conforme mostrado no exemplo a seguir:
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = Cells(1, 2).Value
Next i
Cada loop neste exemplo obtém a propriedade Value da célula Cells(1,2). Se você atribuir a propriedade Value de Cells(1.2) a uma variável antes do início do loop, você obterá uma execução mais rápida. Conforme mostrado no exemplo a seguir:
tmp = Cells(1, 2).Value
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = tmp
Next i
O código acima chama ThisWorkbook.Sheets("Sheet1") sempre que faz um loop. Você pode fazer isso mais rapidamente usando a instrução With para mover a chamada para ThisWorkbook.Sheets("Sheet1") fora do loop. Conforme mostrado no exemplo a seguir:
tmp = Cells(1, 2).Value
With ThisWorkbook.Sheets("Sheet1")
For i = 1 To 1000
.Cells(1, 1) = tmp
.Cells(2, 1) = tmp
.Cells(3, 1) = tmp
Next i
End With
Iniciantes geralmente preferem usar variáveis do tipo Variant, o que tem a vantagem de ser menos complicado porque qualquer tipo de dado pode ser usado sem o problema de estouro de memória se os dados forem muito grandes para os tipos de dados Integer ou Long. No entanto, os dados do tipo Varienmt requerem mais espaço de memória extra do que os outros tipos especificados (2 bytes para dados inteiros, 4 bytes para dados longos e 16 bytes para dados variantes), o VBA requer mais tempo para processar dados do tipo variante do que outros tipos especificados De dados. Como mostra o exemplo a seguir.
Sub VariantTest()
Dim i As Long
Dim ix As Integer, iy As Integer, iz As Integer
Dim vx As Variant, vy As Variant, vz As Variant
Dim tm As Date
vx = 100: vy = 50
tm = Timer
For i = 1 To 1000000
vz = vx * vy
vz = vx + vy
vz = vx - vy
vz = vx / vy
Next i
Debug.Print "Variant types take " & Format((Timer - tm), "0.00000") & " seconds"
ix = 100: iy = 50
tm = Timer
For i = 1 To 1000000
iz = ix * iy
iz = ix + iy
iz = ix - iy
iz = ix / iy
Next i
Debug.Print "Integer types take " & Format((Timer - tm), "0.00000") & " seconds"
End Sub
No código acima, as linhas 8 a 13 fazem 1 milhão de operações de adição, subtração, multiplicação e divisão de variáveis variantes, e as linhas 17 a 22 fazem 1 milhão de operações de adição, subtração, multiplicação e divisão de variáveis inteiras. No meu computador, a operação da variável Variant demorou cerca de 0,09375 segundos, enquanto a operação da variável Integer demorou cerca de 0,03125 segundos. Os resultados podem variar de computador para computador, mas as variáveis Variant são significativamente mais lentas que as variáveis Integer .
Por esse motivo, é recomendável evitar o uso de variáveis Variant quando você puder usar explicitamente o tipo de dados especificado .
Smartsheet é uma plataforma de trabalho dinâmica que permite gerenciar projetos, criar fluxos de trabalho e colaborar com sua equipe.
SharePoint é um sistema de colaboração baseado na web que usa uma variedade de aplicativos de fluxo de trabalho, bancos de dados de “lista” e outros componentes da web, bem como recursos de segurança para dar controle ao trabalho conjunto de grupos empresariais.
Van Nien Calendar é um aplicativo de visualização de calendário em seu telefone, ajudando você a ver rapidamente a data lunisolar em seu telefone, organizando assim seu trabalho importante.
O Microsoft Outlook é um aplicativo comercial e de produtividade desenvolvido pela Microsoft Corporation.
ClickUp é uma das plataformas de produtividade mais bem avaliadas para qualquer empresa. Grandes empresas como Google, Booking.com, San Diego Padres e Uber usam ClickUp para aumentar a produtividade no local de trabalho.
PDF se tornou um formato comumente usado para leitura, criação e envio de documentos de texto. Por sua vez, tem havido um aumento no número de programas utilizados para este tipo de documentação. PDF-XChange Viewer está entre um número crescente de visualizadores de PDF.
Apache OpenOffice oferece um conjunto completo de aplicativos Office que rivalizam com o Microsoft 365, especialmente em Excel, PowerPoint e Word. Ele permite que você gerencie seus projetos de forma mais eficaz e suporta diversos formatos de arquivo.
O software iTaxViewer é o software de leitura de arquivos XML mais popular atualmente. Este software é uma aplicação para leitura de declarações fiscais eletrónicas em formato XML da Direção Geral de Impostos.
Nitro PDF Reader é um prático editor de PDF que cobre todas as tarefas básicas que a maioria das pessoas realiza todos os dias com documentos PDF.
Foxit Reader é principalmente um leitor de PDF e também permite criar arquivos PDF, assiná-los, editá-los e adicionar anotações. Funciona em sistemas operacionais, existem plugins para diversos programas do pacote Microsoft Office.