Lentidão ao Inserir...
 
Notifications
Clear all

Lentidão ao Inserir Vários Dados do Userform para Planilha

3 Posts
2 Usuários
0 Reactions
1,294 Visualizações
(@berti)
Posts: 23
Eminent Member
Topic starter
 

Pessoal,

Mais um help aqui dos gênios.

Em uma linha de separação de peças onde o operador separada através de uma ficha chamada "boleta", montei um Form para incluir dados para controle de produtividade. Como por padrão a cada operador é lançado no controle 10 boletas por vez. Hoje eu fiz um form direto na planilha, esta funcionando bem, mas com o tempo vai pesando, agora optei por fazer em UserForm no ambiente VBA. O que acontece.

A sequencia de lançamento é para cada txt_cbu que vai do 1 até o 10 no frame CBUs os dados seriam para o mesmo operador, lançado no cabeçalho inicial. O que acontece, em muitas das vezes um operador não chega a pegar 10 boletas em uma vez, o que ficaria várias textbox do frame CBUs vazio mas com o nome do operador inserido no cabeçalho inicial.

Não sei se fiz a sequencia certa do codigo, mas ficou muito lento para processar.

Não sei se fui claro o suficiente, mas qualquer coisa vou postando as duvidas.

Conto com a ajuda dos Srs.

 
Postado : 22/07/2015 11:55 am
(@edcronos)
Posts: 1006
Noble Member
 

é meio dificil se achar numa planilha desse tamanho

mas ao meu ver está faltando o basico de um bom desenvolvimento

congelar tela e calculo de formulas enquanto a macro roda
isso se usa no inicio da macro :

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

------------------------------------------------------------------------------------------------------------------------------
vai selecionar apenas as linhas que tem dados isso vai evitar de ter que mudar a macro quando a planilha tiver mais linhas do que a macro suporta
" a não ser que se tenha uma area fixa que se queira"

coluna ="F"
Set intervalo1 = Range(coluna & 2, coluna & Cells(Rows.Count, coluna).End(xlUp).Row )

em vez de:
Set intervalo1 = Range("F2:F20000")
-----------------------------------------------------------------------------------------------------------------------------------
não é necessário fazer select

Set intervalo1 =Sheets("BD_CBUs").Range("F2:F20000")
Set intervalo2 = Sheets("BD_CBUs").Range("K2:K20000")

ou para pegar até a ultima linha com dados
With Sheets("BD_CBUs")
coluna ="F"
Set intervalo1 = .Range(coluna & 2, coluna & .Cells(Rows.Count, coluna).End(xlUp).Row )

coluna ="K"
Set intervalo2 = .Range(coluna & 2, coluna & .Cells(Rows.Count, coluna).End(xlUp).Row )
end With
em vez de
Sheets("BD_CBUs").Select
Set intervalo1 = Range("F2:F20000")
Set intervalo2 = Range("K2:K20000")

================================================================================================

fora isso
Pelo que reparei e seria a informação mais importante para a solução do seu problemas é que a macro que ocasiona a lentidão e a mais feia que vi na planilha seria a
Private Sub cmd_lancar_Click()
que está no formulario Frm_Lancamentos

com um monte de ActiveCell.Offset
para esse vai ter que ter animo para editar

Mas por enquanto use :
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

no inicio da macro
e
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

no final da macro

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 23/07/2015 8:56 pm
(@edcronos)
Posts: 1006
Noble Member
 

mais uma coisa
até achar alguem com cabeça para editar essa macro

para deixar a macro com visual mais limpo
em vez de usar
ActiveCell.Offset(0, 1) = Empty
ActiveCell.Offset(0, 2) = Empty
ActiveCell.Offset(0, 3) = Empty
ActiveCell.Offset(0, 4) = Empty
ActiveCell.Offset(0, 5) = Empty
ActiveCell.Offset(0, 6) = Empty
ActiveCell.Offset(0, 7) = Empty
ActiveCell.Offset(0, 8) = Empty
ActiveCell.Offset(0, 9) = Empty

use assim:
Range( ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 9) ) = Empty

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 23/07/2015 9:10 pm