Notifications
Clear all

Deixar código mais rápido

17 Posts
3 Usuários
0 Reactions
3,311 Visualizações
victorsam
(@victorsam)
Posts: 110
Estimable Member
Topic starter
 
'        Me.lblPri6mes.Caption = Format(Sheets("Total_Ano").Range("D13"), "#,##0.00") 'valor apurado
'        Me.lblUltim6mes.Caption = Format(Sheets("Total_Ano").Range("L13"), "#,##0.00") 'valor gasto
'        Me.lblanual.Caption = Format(Sheets("Total_Ano").Range("E16"), "#,##0.00")

Tentar não é saber, é ter a certeza que vai descobrir

Dicas excel, vba, Access http://vbaedit.blogspot.com.br/

 
Postado : 24/08/2014 3:29 pm
(@edcronos)
Posts: 1006
Noble Member
 

desculpe posso estar enganado,
mas não vejo nada aí para ser modificado que mexeria na performance
nem vejo nada que deixaria a planilha lenta

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 : 24/08/2014 3:34 pm
victorsam
(@victorsam)
Posts: 110
Estimable Member
Topic starter
 

Tipo algo como

With sheets("Total_Ano")
CÓDIGO AQUI
end with

É POSSÍVEL?

Tentar não é saber, é ter a certeza que vai descobrir

Dicas excel, vba, Access http://vbaedit.blogspot.com.br/

 
Postado : 24/08/2014 3:42 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Quanto a velocidade (melhora a performance)
http://www.cpearson.com/excel/optimize.htm

Ou..você pretende deixar o código reduzido (menos linha de código), possível?

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 24/08/2014 3:48 pm
(@edcronos)
Posts: 1006
Noble Member
 

With Format(Sheets("Total_Ano")
Me.lblPri6mes.Caption =.Range("D13"), "#,##0.00") 'valor apurado
Me.lblUltim6mes.Caption = .Range("L13"), "#,##0.00") 'valor gasto
Me.lblanual.Caption =.Range("E16"), "#,##0.00")
end with
é possível sim e muito mais pratico ,
mas como vc falou de deixar rápido pensei que algo estava arrastando a execução

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 : 24/08/2014 3:57 pm
victorsam
(@victorsam)
Posts: 110
Estimable Member
Topic starter
 

O que acha?

Private Sub CommandButton7_Click()
       txtPri6M.Value = Sheets("Total_Ano").Range("D13")
       txtUlt6Mes.Value = Sheets("Total_Ano").Range("L13")
       txtTotalAno.Value = Sheets("Total_Ano").Range("E16")
End Sub

Private Sub txtPri6M_Change()
txtPri6M = Format(txtPri6M, "#,##0.00")
End Sub

Private Sub txtTotalAno_Change()
txtTotalAno = Format(txtTotalAno, "#,##0.00")
End Sub

Private Sub txtUlt6Mes_Change()
txtUlt6Mes = Format(txtUlt6Mes, "#,##0.00")
End Sub

Por preciso ficar chamando as txt sempre

Tenho um Userform tipo o Home atraveis desse eu abro varios Userforms

e cada userform que abro atraveis do Home, tem que atualizar os valores dessas textboxs ai

Algum código pra atualizar as textbox quando eu sair de cada userform, tipo sem chamar esse código ai?

Tentar não é saber, é ter a certeza que vai descobrir

Dicas excel, vba, Access http://vbaedit.blogspot.com.br/

 
Postado : 24/08/2014 4:01 pm
(@edcronos)
Posts: 1006
Noble Member
 

vamos dizer assim...
maneira existe muitas para cada caso
mas como preencher algo sem algo?

se os valores fossem os mesmos ou se a oreigem a mesma poderia se usar algo como isso

comb = Me.ActiveControl.Name
Call PreencheCombobox(comb)

mas o valores e origem mudam oq impossibilita uma chamada única

mas de qualquer forma só mesmo se vendo todo o contexto para se ter alguma opinião concreta
até mesmo em relação aos nomes dos objetos para se fazer um loop neles em vez de fazer referencia 1 a 1

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 : 24/08/2014 4:26 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Edcronos, boas respostas! Tô gostando de ver!
Victor, uma forma de melhorar desempenho é trabalhar com matrizes, mas isso muda significativamente o desempenho quando você tem diversas referências a uma planilha, numa mesma rotina. Ao referenciar a matriz da planilha, tudo fica mais rápido. No seu caso a melhora seria insignificante.

Quanto a preencher os textboxes, eu digo que fazer leitura e escrita em qualquer célula (ou seja, objeto do tipo range) é lento pra caramba. Diversas dessas leituras ou escritas é mais lento ainda. Se você está escrevendo em células, e o recálculo está sendo disparado, aí justifica o link que o AlexVBA mandou, que é especificamente sobre desempenho, recálculo e funções voláteis ou não.

Pelo que vi no pouco código que você postou, é impossível dar outras dicas....

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 24/08/2014 5:11 pm
victorsam
(@victorsam)
Posts: 110
Estimable Member
Topic starter
 

Edcronos, boas respostas! Tô gostando de ver!
Victor, uma forma de melhorar desempenho é trabalhar com matrizes, mas isso muda significativamente o desempenho quando você tem diversas referências a uma planilha, numa mesma rotina. Ao referenciar a matriz da planilha, tudo fica mais rápido. No seu caso a melhora seria insignificante.

Quanto a preencher os textboxes, eu digo que fazer leitura e escrita em qualquer célula (ou seja, objeto do tipo range) é lento pra caramba. Diversas dessas leituras ou escritas é mais lento ainda. Se você está escrevendo em células, e o recálculo está sendo disparado, aí justifica o link que o AlexVBA mandou, que é especificamente sobre desempenho, recálculo e funções voláteis ou não.

Pelo que vi no pouco código que você postou, é impossível dar outras dicas....

É que assim Fernando, as vezes quando eu chamo o código o programa trava e fecha.

     Me.Label381.Caption = Format(Sheets("Total_Ano").Range("V3"), "#,##0.00") 'valor apurado
       Me.Label382.Caption = Format(Sheets("Total_Ano").Range("V4"), "#,##0.00") 'valor gasto
       Me.Label383.Caption = Format(Sheets("Total_Ano").Range("V5"), "#,##0.00") 'valor saldo

       Me.Label395.Caption = Format(Sheets("Total_Ano").Range("V6"), "#,##0.00") 'BEBIDA valor apurado

       Me.Label398.Caption = Sheets("Total_Ano").Range("V7") ''''''''''''''''''''''''PRODUTO quant
       Me.Label399.Caption = Format(Sheets("Total_Ano").Range("V8"), "#,##0.00") 'PRODUTO val ppago

       Me.Label387.Caption = Sheets("Total_Ano").Range("V9") ''''''''''''''''''''''''OUTROS dia trab
       Me.Label388.Caption = Format(Sheets("Total_Ano").Range("V10"), "#,##0.00") 'OUTROS media dia
       Me.Label389.Caption = Format(Sheets("Total_Ano").Range("V11"), "#,##0.00") ''''OUTROS indice%

       Me.Label402.Caption = Format(Sheets("Total_Ano").Range("V12"), "#,##0.00") ''''CARNE quilo
       Me.Label403.Caption = Format(Sheets("Total_Ano").Range("V13"), "#,##0.00") 'CARNE val pOUT

       Me.Label392.Caption = Format(Sheets("Total_Ano").Range("V14"), "#,##0.00") 'VENDEDOR valor apurado
       Me.Label393.Caption = Format(Sheets("Total_Ano").Range("V15"), "#,##0.00") 'VENDEDOR MENO 30%

e se eu especificar que estou formatando os dados da planilha tal e a formato a ser formatado, e assim não precisa eu repetir em todas as labeis
a plan e a formatação.
Tem como? tentei fazer com WITH mais num consegui não

Tentar não é saber, é ter a certeza que vai descobrir

Dicas excel, vba, Access http://vbaedit.blogspot.com.br/

 
Postado : 01/09/2014 5:35 pm
(@edcronos)
Posts: 1006
Noble Member
 

o ideal seria vc postar uma planilha de exemplo com o codigo que vc já tem aplicado e explicar bem oq vc pretende

pelo que eu vi dá para fazer um loop nas Labels mas tem que se ve o resto do codigo e saber oq vc pretende na integra

não tenho certeza, mas acho que se usar text
Me.Label393.Caption =Sheets("Total_Ano").Range("V15").text

alem do valor é copiado o formato da celula
mas o ideal mesmo é ve oq vc pretende e como é a sua planilha para otimizar e diminuir as linhas de comando

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 : 01/09/2014 6:05 pm
victorsam
(@victorsam)
Posts: 110
Estimable Member
Topic starter
 

O que eu quero é tentar deixar o código mais rápido tendi por que acho muito informação pra chamar de uma vez só.
bem eu acho neh. srsrs

e como eu falei acima esse codigo ta travando o userform

Tentar não é saber, é ter a certeza que vai descobrir

Dicas excel, vba, Access http://vbaedit.blogspot.com.br/

 
Postado : 01/09/2014 6:15 pm
(@edcronos)
Posts: 1006
Noble Member
 

infelizmente não posso nem tentar ajudar sem ver a planilha, oq vc já tem de macro e como está estruturada a userform

dá para fazer um loop, mas não vai influenciar na velocidade, apenas na praticidade

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 : 01/09/2014 6:19 pm
victorsam
(@victorsam)
Posts: 110
Estimable Member
Topic starter
 

É que assim Edcronos o userform só trava no ato da chamada entendeu pelo o que vejo o código é responsável pelo o travamento tende mais enfim
vou testa aqui com esse que vc me passou.. valew

Tentar não é saber, é ter a certeza que vai descobrir

Dicas excel, vba, Access http://vbaedit.blogspot.com.br/

 
Postado : 01/09/2014 6:26 pm
(@edcronos)
Posts: 1006
Noble Member
 

cara não tem como postar uma planilha de exemplo e a userform que vc está montando só para se entender
tipo vai ter que renomear as labels para ficarem em conjunto nomeados assim é possivel um loop nelas
ou montar uma array com o nomes e ranges

ficaria algo mais ou menos assim...

Sub DeslocaLe_Click()
    Ref = Array("revC", "freC", "incrC", "revL", "freL", "incrL", "Lo")
    For r = 0 To 6
        dr = Cells(41 + r, 6).Value2
        revCA = Split(dr, ",")
        For Cs = 1 To 13
            ObRef = Ref(r) & Cs
            dr = revCA(Cs - 1)
            If dr = "Verdadeiro" Then dr = True:
            If dr = "Falso" Then dr = False:
            Me.Controls(ObRef) = dr
        Next
    Next
End Sub

cada nome dentro da array é um objeto e cada objeto tem 13 deles, no total de 91 objetos, e no loop é adicionado o valor a cada um deles

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 : 01/09/2014 6:30 pm
(@edcronos)
Posts: 1006
Noble Member
 

considerando que Text pega tbm o formato da celula "fiz o teste"

um loop para pegar os valores ficaria mais ou menos assim:

Sub exemplo()
    With Sheets("Total_Ano")
       Linini = 3    ' ----------------------primeira linha
       col = Cells(1, "V").Column    '--------------------coluna que vai pegar os valores

       For Lab = 381 To 400    '-------------------------Conta da primeira label até a ultima
       Label = "Label" & Lab '-------------junta o Label Com o valor do loop para gerar o nome da label "Label381"

            Me.Controls(Label).Caption = .Cells(Linini, col).Text    ' ----= Me.Label381.Caption = .["V3"].Text 'valor apurado

            Linini = Linini + 1      '---------------------------pula uma linha na planilha
        Next
    End With
End Sub

mas vc vai ter que ter as numerações das labels em sequencia e onde elas pegam o valor tbm
o ideal é renomear as labels para ficarem com um padrão unico

att

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 : 01/09/2014 11:42 pm
Página 1 / 2