Notifications
Clear all

Otimizar Código para execução mais rápida

4 Posts
2 Usuários
0 Reactions
1,296 Visualizações
(@felipesalomao)
Posts: 103
Estimable Member
Topic starter
 

Olá Pessoal Gostaria de aprender algumas técnicas para poder otimizar o código e agilizar o processamento, pois tem botões que estão levando 3-5 segundos para processar.

Olhem esse código por exemplo:

Sub ERASELINHA2()
        Dim Scel As Long
        Application.EnableEvents = False
        Cells(ActiveCell.Row, "A").EntireRow.Delete
        Scel = ActiveCell.Row - 9
        Sheets("Impostos").Select
        Cells(Scel, "A").EntireRow.Delete
        Sheets("Estimativas Finais").Select
        Cells(Scel, "A").EntireRow.Delete
        Sheets("Order List").Select
        Cells(Scel, "A").EntireRow.Delete
        Sheets("Cadastro").Select
        Application.EnableEvents = True
    End Sub

é Um código para apagar a linha d 4 guias diferentes, porém gostaria de ao invés de usar sheets("guia").Select usar o comando para apagar referenciando a guia que quero (evitando que ter que fazer o código entrar efetivamente em cada guia e voltando a ultima, um detalhe é que essas guias tem várias rotinas para manter a formatação, ocultar guias, menus, etc) Tenho certeza que é isso que deixa lerdo.

Quero aplicar o mesmo conceito no código (cria novas linhas em 4 guias diferentes):

Sub NOVALINHA()
Dim numerocelula As Integer
    
    ActiveCell.Rows("1:1").EntireRow.Select
    Selection.Copy
    
    ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
    Selection.Insert Shift:=xlDown
    
    numerocelula = ActiveCell.Row - 10
    
    Sheets("Impostos").Select
    
    Cells(numerocelula, "A").EntireRow.Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
    Selection.Insert Shift:=xlDown
    
    Sheets("Estimativas Finais").Select
    Cells(numerocelula, "A").EntireRow.Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
    Selection.Insert Shift:=xlDown
    
    Sheets("Order List").Select
    Cells(numerocelula, "A").EntireRow.Select
    Selection.Copy
    ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
    Selection.Insert Shift:=xlDown
    
    Sheets("Cadastro").Select
    ActiveCell.Offset(0, 2).Range("A1:C1").Select
    Selection.ClearContents
    
    ActiveCell.Offset(-1, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "1"
    ActiveCell.Offset(1, -3).Range("A1:C1").Select
    
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = ""
    ActiveCell.Offset(0, -3).Range("A1:C1").Select
    
    
End Sub

Qualquer ajuda é bem vinda. Vlw

 
Postado : 18/08/2012 1:58 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Exemplo:

Sub Otimizar()
'Fonte:http://www.cpearson.com/excel/optimize.htm
Application.ScreenUpdating = False
Application.EnableEvents = False
'Seu código
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
 
Postado : 18/08/2012 3:21 am
(@felipesalomao)
Posts: 103
Estimable Member
Topic starter
 

Bom dia!!

Exemplo:

Sub Otimizar()
'Fonte:http://www.cpearson.com/excel/optimize.htm
Application.ScreenUpdating = False
Application.EnableEvents = False
'Seu código
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Oi, já utilizo isso. Para desativar atualização da tela, ganha um bom tempo, porém ainda está demorando cerca de 4 segundos para executar o código. estou perdendo muito tempo pois tenho que "entrar" nas planilhas e indiretamente executar todas as rotinas de cada planilha, gostaria de usar algo que grave/leia dados direto de cada planilha sem ter que entrar nela (ex: procv pode pegar dados diretos sem entrar na planilha, por isso é executado praticamente em tempo real, queria evitar usar o "Sheets("Impostos").Select" por exemplo, entende ? é esse tipo de otimização que gostaria.

Vlw

 
Postado : 18/08/2012 2:22 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Tente...

Sub ERASELINHA2()
    Dim Scel As Long
    Application.EnableEvents = False
    ActiveCell.EntireRow.Delete
    Scel = ActiveCell.Row - 9
    Sheets("Impostos").Rows(Scel).Delete
    Sheets("Estimativas Finais").Rows(Scel).Delete
    Sheets("Order List").Rows(Scel).Delete
    Application.EnableEvents = True
End Sub
 
Postado : 18/08/2012 3:07 pm