Notifications
Clear all

Demora em Executar Macro

7 Posts
3 Usuários
0 Reactions
2,065 Visualizações
(@alvaro)
Posts: 78
Trusted Member
Topic starter
 

Pessoal, bom dia.
Tudo bem com vocês?

Pessoal, eu tenho uma macro (Planilha Anexo) que esta demorando em torno de 1 minuto e 30 segundos para rodar.
Queria pedir uma ajuda a vocês para ver se tem como otimizar essa macro de modo que ela rode mais rápido.

Muitíssimo obrigado a todos e um Feliz Natal!!
Abraços!!

 
Postado : 25/12/2017 8:51 am
(@mprudencio)
Posts: 2749
Famed Member
 

Que filtro ?

Qual o Codigo?

Pessoalmente eu trocaria esse monte de optionbutton por uma unica combobox

E essas 100 checkboxs? :shock: :shock:

Isso provavelmente é o que esta causando essa lentidão.

Sugestão: Refazer o formulario.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 26/12/2017 2:24 pm
(@alvaro)
Posts: 78
Trusted Member
Topic starter
 

Olá MPrudencio, primeiramente muitíssimo obrigado pela atenção em olhar minha duvida, agora vamos lá.

Que filtro ?
R= O nome Filtro da Planilha é do equipamento ao qual essa planilha é destinada

Qual o Código?
O código seria esse:

Private Sub Btn_Troca_Total_Click()

Dim Maximo
For Each Control In Me.Controls
If TypeName(Control) = "CheckBox" Then
Control.Value = True
If Control.Value = True Then

Maximo = Sheets("Banco de Dados").Cells(Rows.Count, 2).End(xlUp).Row

'Data
Sheets("Banco de Dados").Cells(Maximo + 1, "B") = DTPicker1.Value
'Filtro
Sheets("Banco de Dados").Cells(Maximo + 1, "C") = Lbl_Filtro.Caption
'Disco
Sheets("Banco de Dados").Cells(Maximo + 1, "D") = Left(Control.Caption, 1)
'Setor
Sheets("Banco de Dados").Cells(Maximo + 1, "E") = Right(Control.Caption, 2)
'Mes
Sheets("Banco de Dados").Cells(Maximo + 1, "F") = Month(DTPicker1.Value)
'Ano
Sheets("Banco de Dados").Cells(Maximo + 1, "G") = Year(DTPicker1.Value)
End If
Control.Value = False
End If
Next Control
End Sub

Com relação aos OptionsButtons, eu prefiro assim do que Combobox, acho mais dinâmico e mais ágil a seleção.

E com relação aos CheckBox (kkkkk) é o seguinte.

Esse equipamento (Filtro) ele tem 10 Discos (representados pelas letras de A ao J) e 10 setores em cada disco, (representados pelos números de 1 a 10).
Vai ter momentos que eu vou ter que selecionar 30 CheckBox de uma vez.
Então por isso eu coloquei esse tanto de CheckBox. hehehe

Caso não tenha sido claro, fico a disposição.
Muitíssimo obrigado!!

 
Postado : 26/12/2017 4:36 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Não entendi muito bem o objetivo, mas ainda assim as 100 checkbox podem e devem ser trocados.

Isso provavelmente vai mudar o tempo de execução da planilha.

Aqui deu erro na linha abaixo:

Sheets("Banco de Dados").Cells(Maximo + 1, "B") = DTPicker1.Value

E por isso nao consegui testar o codigo.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 26/12/2017 7:30 pm
(@alvaro)
Posts: 78
Trusted Member
Topic starter
 

Andei pensando demais na sua sugestão, mas realmente eu não achei uma outra forma de montar o formulário desde que atinja meu objetivo.

Com relação ao código que deu erro..
Pode substituir o "=DtPicker1.value" por uma data aleatória.

Atual:
Sheets("Banco de Dados").Cells(Maximo + 1, "B") = DTPicker1.Value

Substituir por:
Sheets("Banco de Dados").Cells(Maximo + 1, "B") = "26/12/2017"

Muito obrigado por sua atenção MPrudencio.
Forte abraço.

 
Postado : 26/12/2017 8:06 pm
(@klarc28)
Posts: 971
Prominent Member
 
Control.Value = True

Nessa linha você seleciona todos os checkboxes. Pela sua descrição, às vezes você vai precisar selecionar 30, mas, nessa linha você sempre seleciona todos. Isso retarda o processamento. Verifique se essa linha é realmente necessária. Experimente tirá-la, veja se acelera o processamento. Talvez você deva colocar mais um checkbox com o título "selecionar todos" e fazer um if:

if checkbox101.value = true then
Control.Value = True
end if
 
Postado : 26/12/2017 8:17 pm
(@alvaro)
Posts: 78
Trusted Member
Topic starter
 

Valeu a dica Klarc.
Segui sua linha de raciocínio e deu uma melhorada significativa.

Muito obrigado!!

 
Postado : 02/01/2018 4:28 am