Notifications
Clear all

Macro deixou de funcionar

7 Posts
1 Usuários
0 Reactions
2,697 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Eu achei por aqui uma dica que agilizava a execução de uma macro não exibindo suas etapas. Era so colocar no inicio dela Application.ScreenUpdating = False.
Alterei um bocado de macros com essa dica mas em uma a coisa não funcionou e gostaria da ajuda de vocês para contornar isso.
Como minhas planilhas são longas estabeleci algumas telas para melhorar a navegação. A macro em questão seleciona uma determinada tela em todas as planilhas de dias do mês (1 a 31).
1) coloquei a dica em mais de 20 macros e só nesta não deu certo
2) a macro parece q executa pois vai até o último dia mas não posiciona a tela com a celula A2 ("R2C1") no canto superior esquerdo apesar da célula A2 ficar selecionada.
3) ao retirar a dica a macro funciona direitinho. Todas as planilhas ficam com a tela selecionada.
O código é o seguinte
Application.ScreenUpdating = False
ActiveSheet.Next.Select
Application.Goto Reference:="R43C91"
Application.Goto Reference:="R2C1"
ActiveSheet.Next.Select
Application.Goto Reference:="R43C91"
Application.Goto Reference:="R2C1"
ActiveSheet.Next.Select
Application.Goto Reference:="R43C91"
Application.Goto Reference:="R2C1"
ActiveSheet.Next.Select
E assim por diante até completar 31 dias...
O problema é q ela está chegando no final mas não altera as telas. Retirei a primeira linha (a dica) e ela funciona! Mistério...
Alguém tem uma pista???

 
Postado : 17/10/2011 10:07 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Fernando, a instrução :
Application.ScreenUpdating = False
Geralmente é utilizada para se congelar os vários passos que são efetuados nas rotinas, mas se em determinda parte pretendemos visualizar, temos de torna-la Verdxadeira :
Application.ScreenUpdating = True,
por padrão quando não utilizamos esta instrução ela exibe os passos, mas quando reslovemos utiliza-la devemos lhe passar o parametro contrário, e o local de se colocar a mesma irá depender muito do que queremos ou não exibir, podendo torna-la Verdadeira em uma determinada parte e logo em seguida voltar a falso.
Uma outra obs, é que devemos sempre utiliza-las com cuidado para não termos efeitos indesejados.

[]s

 
Postado : 17/10/2011 10:36 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

...Olá Fernado AV, assim como foi dito pelo Mauro e observando sua rotina, tente no final Application = True.

Se isso não resolver anexa sua planilha para que possamos te ajudar.

Att..

 
Postado : 17/10/2011 4:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite!
Arquivo de exemplo presente em http://dl.dropbox.com/u/20051709/TesteMacro.xlsm .
Aguardo a ajuda e solução do mistério!
Abraços
Fernando

 
Postado : 18/10/2011 6:48 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

fernando, como eu disse acima, precisamos reverter a exbição da tela, usando :

Application.ScreenUpdating = True

Tambem avisei sobre o cuidado com o uso deste recurso, precisando ser bem analisado onde devemos utiliza-lo :

Veja, congelamos a tela no Inicio :
Sub TotalTotalizacao()
Application.ScreenUpdating = False
ActiveSheet.Next.Select
...........
................
......................
End Sub

então até o final da rotina permanecerá esta condição,
agora como as últimas instruções da rotina são :
ActiveSheet.Next.Select
Application.Goto Reference:="R43C91"
Application.Goto Reference:="R2C1"

para que o Scroll em : Application.Goto Reference:="R2C1" funcione da maneira que deseja, devemos reverter o False para True na linha que antecede a instrução que queremos, ficando assim :
ActiveSheet.Next.Select
Application.Goto Reference:="R43C91"

Application.ScreenUpdating = True
Application.Goto Reference:="R2C1"

End Sub

Altere a rotina e faça os testes, e veja se é isto mesmo.

[]s

 
Postado : 18/10/2011 7:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Caro Mauro, não deu certo. Acredito q estejamos olhando na direção errada.
A macro como estava construida, talvez de um modo tosco, dava certo. Mas ao eu querer esconder este jeito tosco acabei por gerar uma forma errada dessa macro funcionar.
Observe por favor para q ela serve e tente me ajudar a pensar de uma outra forma de fazê-la funcionar.
Tenho 31 dias e sete telas em cada um deles que estão umas embaixo das outras. A macro serve para posicionar a mesma tela em todos os dias. Por isso a mesma instrução se repete 30 vezes na macro.
Quando ela não tem a instrução "Application.ScreenUpdating = False" apresenta no monitor, dia a dia a tela selecionada mas com a instrução "mágica" ela apenas seleciona a célula da macro mas não desloca a tela.
Tem alguma forma de eu posicionar várias planilhas para visualizão do mesmo grupo de células?
Abçs

 
Postado : 19/10/2011 1:46 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Francisco, eu havia me baseado somente na rotina que você havia postado, agora analisando melhor o modelo, não sei entendi direito, então, alterei as rotinas que constam somente nos Modulos :
IrTodosDias, e
IrParaDiario.

No Modulo : IrTodosDias
Fiquei em duvida na Rotina TotalTotalizacao, não entendi porque seleciona Aba por Aba, Celula por Celula, se não temos nenhuma função, tipo copiar e colar, terminando na Aba do dia "30".
Se a intenção é ir direto para a Última Aba a "30", a rotina ficou assim :

Sub TotalTotalizacao()
    Dim sRow As Long
    
    'Application.Goto Reference:="R2C1"
    sRow = 2 'refre-se a Linha acima, ou seja : 2
    
    Application.ScreenUpdating = False
    
    Worksheets("30").Activate
    
    With ActiveWindow
        .ScrollColumn = 1
        .ScrollRow = sRow
        Cells(sRow, "A").Activate
    End With
End Sub

No Modulo : IrParaDiario
Alterei todas as rotinas, aqui é como ficou uma delas :
Se a intenção nesta rotina, é ir para a Coluna, Linha e Celula especifica, substitui as instruções abaixo :
Sub IrControles_OLD()
Application.Goto Reference:="R125C91"
Application.Goto Reference:="R86C1"
End Sub

Ficando assim :

Sub IrControles()
    Dim sRow As Long
    
    'Application.Goto Reference:="R86C1" 'Linha
    sRow = 86 'Refere-se a Linha acima, ou seja : 86
    
    With ActiveWindow
        .ScrollColumn = 1
        .ScrollRow = sRow
        Cells(sRow, "A").Activate
    End With
End Sub

Veja se seria isto, se for, poderiámos definir algumas Variáveis como Publicas, não necessitando repetir em todas as rotinas, mas isto fica para outra oportunidade, se estivermos no caminho certo.

http://www.4shared.com/file/lEP1wU8y/Te ... Mauro.html

[]s

 
Postado : 19/10/2011 7:27 pm