Usuário com melhor resposta
MELHORAR RAPIDEZ DE EXECUÇÃO DE CÓDIGO

Pergunta
-
Boa tarde.
Possuo um código associado a um botão, que me serve para limpar a coloração das células. Acontece que o código torna-se lento na sua execução, embora em termos de eficácia cumpra com o que lhe é exigido.
Na realidade, também posso aplicar o código inverso do que utilizo para colorir as células, mas torna-se ainda mais lento para percorrer as cerca de 3000 linhas preenchidas da folha de cálculo.
Não sou expert em VBA, sou apenas um autodidata que tem poucos conhecimentos.
os códigos que consegui, são:
Dim ULTLINHA As Long ULTLINHA = Cells(Rows.Count, 1).End(xlUp).Row Range("A2:A" & ULTLINHA).Select For Each Cell In Selection If Cell.Interior.Color <> vbWhite Then Cell.Interior.Color = xlNone End If Next MsgBox " A COLORAÇÃO DO PREENCHIMENTO" & vbLf & vbLf & _ " FOI RETIRADA. " CheckBox1.Value = 0 CheckBox1.Visible = False
O segundo código é este:
Dim NLAST As Long Dim N As Integer With Sheets("REGISTOS") NLAST = .Cells(.Rows.Count, 3).End(xlUp).Row 'Ler última célula preenchida da coluna C End With For N = 2 To NLAST With Sheets("REGISTOS") .Cells.Interior.ColorIndex = xlNone End With Next MsgBox "----- A COLORAÇÃO DO PREENCHIMENTO FOI RETIRADA. -----" CheckBox1.Value = 0 CheckBox1.Visible = False
Preciso pois de melhorar a performance da minha mini aplicação VBA, de forma que a ação de limpar a coloração das células se faça de forma mais rápida.
Para isso, dados os poucos conhecimentos que possuo, solicito a vossa ajuda.
Cumprimentos
M_A_L
M_A_L
Respostas
-
Desabilite a visualização do que está sendo executado, isso faz com que o método rode mais rápido.
Só não esqueça de retornar para True no final do método.
Sub Teste() Application.ScreenUpdating = False '....Seu procedimento '....Seu procedimento '....Seu procedimento Application.ScreenUpdating = True End Sub
Natan
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sexta-feira, 7 de novembro de 2014 01:28
-
Além da dica do Natan, faça o seguinte com o segundo código:
ThisWorkbook.Worksheets("REGISTOS").Columns("C").Interior.ColorIndex = xlNone
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sexta-feira, 7 de novembro de 2014 01:28
Todas as Respostas
-
Desabilite a visualização do que está sendo executado, isso faz com que o método rode mais rápido.
Só não esqueça de retornar para True no final do método.
Sub Teste() Application.ScreenUpdating = False '....Seu procedimento '....Seu procedimento '....Seu procedimento Application.ScreenUpdating = True End Sub
Natan
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sexta-feira, 7 de novembro de 2014 01:28
-
Além da dica do Natan, faça o seguinte com o segundo código:
ThisWorkbook.Worksheets("REGISTOS").Columns("C").Interior.ColorIndex = xlNone
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sexta-feira, 7 de novembro de 2014 01:28
-
Boa noite, Natan.
Obrigado pela resposta. Assim a olho nu não noto qualquer diferença até porque na rotina que vai colorir a célula, essas instruções estão lá e inicialmente também estavam nestes códigos e por não notar melhorias optei por as retirar.
No entanto, vou voltar a colocá-las pois às vezes, muitos poucos fazem muito.
Obrigado pela dica.
Cumprimentos
M_A_L
M_A_L
-
Boa noite Felipe.
Já lá vão quase quatro meses que não trocávamos informação sabre aquela mini aplicação na qual tanto me ajudou.
Trata-se aqui de um melhoramento pois a lista de registos é alterada com frequência e é a forma que arranjei para eliminar dados desatualizados. Desta forma a linha que não tiver a célula colorida será excluída.
Vou alterar a linha de código utilizando a estrutura que me aconselha.
De qualquer forma, vou continuar a trabalhar numa rotina que me facultou antes, que no evento inicialize cria uma base de dados, pois notei que quando ma facultou, a performance melhorou cerca de 90%.
Depois de experimentar a sua dica, darei retorno.
Obrigado mais uma vêz.
Cumprimentos
M_A_L
M_A_L
-