Notifications
Clear all

ScrollArea - Centralizar Tela

12 Posts
3 Usuários
0 Reactions
2,113 Visualizações
(@rafaelp)
Posts: 0
New Member
Topic starter
 

Bom dia a todos!

Estou desenvolvendo uma planilha para controle de locação.
Conforme anexo, na aba "Menu", tenho o botão localizar que acha os Apartamentos conforme os dados nas celulas B3 e B4.
Eu estou utilizando o comendo ScrollArea para deixar o usuário modificar apenas os dias do mês dentro da tabela.

O meu problema é que quando seleciono o AP2, 3 ou 4, a tela fica para baixo e eu tenho que utilizar manualmente o mouse para a tabela ficar centralizada na tela. O que preciso é alguma maneira de deixar sempre a tabela do Calendário centralizada na tela sempre que clicar em "Localizar".

Desde já agradeço!

 
Postado : 31/08/2016 5:10 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

rafaelp,

Bom dia!

Veja se é assim.

 
Postado : 31/08/2016 6:18 am
(@rafaelp)
Posts: 0
New Member
Topic starter
 

Bom dia wag,

Obrigado pela resposta.
Na verdade esta solução apenas selecionou a Plan1, mas o que eu preciso é selecionar o "AP" e o "ANO" de acordo com o que está nas células B3 e B4 da planilha MENU. Após isto a macro utiliza o comando ScrollArea para travar a tela e deixar utilizar apenas a área do calendário, conforme este código abaixo:

Plan1.ScrollArea = Range(ActiveCell, ActiveCell.Offset(20, 30)).Address

O código que eu desenvolvi está funcionando conforme eu quero, só tem esta questão de descer o mouse pra tela ficar travada.
O que solucionaria meu problema seria simular o "down" do mouse após a seleção (porque aí o ScrollArea trava a tela), porém pesquisei e não encontrei uma solução para isto.

 
Postado : 31/08/2016 6:29 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Não entendi...

mas o que eu preciso é selecionar o "AP" e o "ANO" de acordo com o que está nas células B3 e B4 da planilha MENU

Como assim? Eu não vi nada sendo selecionado quando clico no botão LOCALIZAR...

Quando eu clico no botão LOCALIZAR a única coisa que acontece é passar para a aba APARTAMENTOS...

 
Postado : 31/08/2016 6:37 am
(@rafaelp)
Posts: 0
New Member
Topic starter
 

Correto, eu tenho vários calendários de acordo com o AP selecionado, mas note que quando a macro abaixo é executada no botão localizar, por exemplo selecionando AP3 na célula B3, o calendário não fica no meio da tela e sim para baixo.

Somente após eu descer o mouse a tela fica travada conforme eu preciso.

Sub Localizar()

    Plan1.ScrollArea = ""
    Plan1.Activate
    Range("C2").Activate

        Do Until ActiveCell = Plan2.Range("B3") And ActiveCell.Offset(1, -1) = Plan2.Range("B4")

            ActiveCell.Offset(1, 0).Activate

        Loop

    ActiveCell.Offset(2, 0).Activate

    Plan1.ScrollArea = Range(ActiveCell, ActiveCell.Offset(20, 30)).Address

    
End Sub
 
Postado : 31/08/2016 6:44 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Acho que agora entendi. Nesse caso, não seria melhor você criar uma apa para cada AP? Você pode, inclusive, deixá-las, através do próprio código, invisíveis para o usuário comum.

Fazendo assim (uma aba para cada AP) você não precisará usar ScrollArea.

 
Postado : 31/08/2016 7:03 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Experimente.
Acrescentei as linhas abaixo:
Application.ScreenUpdating = False
Application.ScreenUpdating = True
ActiveWindow.SmallScroll Down:=8
>> ajuste o valor 8 se necessário; se você uniformizar a quantidade de linhas vazias entre as tabelas dos APs a posição final daquelas tabelas também será uniforme

Sub Localizar()
    Application.ScreenUpdating = False  
    Plan1.ScrollArea = ""
    Plan1.Activate
    Range("C2").Activate
        
        Do Until ActiveCell = Plan2.Range("B3") And ActiveCell.Offset(1, -1) = Plan2.Range("B4")
            
            ActiveCell.Offset(1, 0).Activate
            
        Loop
    
    Application.ScreenUpdating = True   
    ActiveCell.Offset(2, 0).Activate

    ActiveWindow.SmallScroll Down:=8 
    Plan1.ScrollArea = Range(ActiveCell, ActiveCell.Offset(20, 30)).Address

End Sub
 
Postado : 31/08/2016 7:22 am
(@rafaelp)
Posts: 0
New Member
Topic starter
 

Experimente.
Acrescentei as linhas abaixo:
Application.ScreenUpdating = False
Application.ScreenUpdating = True
ActiveWindow.SmallScroll Down:=8
>> ajuste o valor 8 se necessário; se você uniformizar a quantidade de linhas vazias entre as tabelas dos APs a posição final daquelas tabelas também será uniforme

Sub Localizar()
    Application.ScreenUpdating = False  
    Plan1.ScrollArea = ""
    Plan1.Activate
    Range("C2").Activate
        
        Do Until ActiveCell = Plan2.Range("B3") And ActiveCell.Offset(1, -1) = Plan2.Range("B4")
            
            ActiveCell.Offset(1, 0).Activate
            
        Loop
    
    Application.ScreenUpdating = True   
    ActiveCell.Offset(2, 0).Activate

    ActiveWindow.SmallScroll Down:=8 
    Plan1.ScrollArea = Range(ActiveCell, ActiveCell.Offset(20, 30)).Address

End Sub

Osvaldomp, sua solução funcionou corretamente porém, decidi fazer uma Aba para cada AP, que facilitará na execução dos outros códigos. Muito obrigado pela atenção!

Acho que agora entendi. Nesse caso, não seria melhor você criar uma apa para cada AP? Você pode, inclusive, deixá-las, através do próprio código, invisíveis para o usuário comum.

Fazendo assim (uma aba para cada AP) você não precisará usar ScrollArea.

wag, realmente, pensei melhor e criar uma aba pra cada AP é melhor mesmo. Muito obrigado pela atenção!

Aproveitando (sem querer abusar :roll: ), estou criando um For Next para percorrer todas as planilhas conforme o código abaixo:

Sub SubsAnos()

    UltPlan = ThisWorkbook.Sheets.Count

    For i = 2 To UltPlan
    
        Plan(i) .Visible = True
        Plan(i).Select
        Range("B4") = "2016"
        Plan(i).Visible = False
    
    
    Next

Porém o comando Plan(i) está dando "Erro de sinxtaxe". Tentei o Worksheets(i) também porém, não sei por qual motivo, ele não percorrer na ordem correta (Plan1, Plan2, Plan3) e sim de outra forma.

Qual seria o comando correto?

 
Postado : 31/08/2016 9:19 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 
    Sub SubsAnos()
        UltPlan = ThisWorkbook.Sheets.Count

        For i = 2 To UltPlan
       
            Sheets(i).Visible = True
            Sheets(i).Select
            Sheets(i).Range("B4") = "2016"
            Sheets(i).Visible = False
       
       
        Next
    End Sub
 
Postado : 31/08/2016 11:09 am
(@rafaelp)
Posts: 0
New Member
Topic starter
 
    Sub SubsAnos()
        UltPlan = ThisWorkbook.Sheets.Count

        For i = 2 To UltPlan
       
            Sheets(i).Visible = True
            Sheets(i).Select
            Sheets(i).Range("B4") = "2016"
            Sheets(i).Visible = False
       
       
        Next
    End Sub

Tentei aqui e ainda não está seguindo a logica que eu preciso. Eu preciso que ele siga o "Name" da planilha (Plan1, Plan2, Plan3, etc) e ele está seguindo uma logica que não estou entendendo.. no primeiro Loop a Plan2 é selecionada corretamente, depois no próximo vai para a Plan12. Segue a planilha anexa para você entender. É a Sub "Anos" do Módulo1.

 
Postado : 31/08/2016 11:29 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

rafaelp,

Bom dia!

Não entendi, ainda, o que é que você quer com esse código! O que é que você quer com essa procedure chamada Anos? É apenas quando clicar no botão OK que seja mostrada a planilha correspondente ao apartamento que foi selecionado na célula B3 da aba MENU? Se for isso, o código não é esse...

 
Postado : 01/09/2016 8:39 am
(@rafaelp)
Posts: 0
New Member
Topic starter
 

rafaelp,

Bom dia!

Não entendi, ainda, o que é que você quer com esse código! O que é que você quer com essa procedure chamada Anos? É apenas quando clicar no botão OK que seja mostrada a planilha correspondente ao apartamento que foi selecionado na célula B3 da aba MENU? Se for isso, o código não é esse...

Bom dia wag!

Na verdade o que eu queria era que o código percorresse as planilhas que eu determinasse e editasse o Ano para o que eu definir. Eu consegui adaptar da seguinte forma:
Não sei se o código está escrito da melhor forma mas consegui o que eu precisava. :D

Muito obrigado pela atenção!

Sub CriarNovoAno()

    
        Application.DisplayAlerts = False
    
        For i = 1 To 10
            
            UltPlan = ThisWorkbook.Sheets.Count
            Worksheets("Plan" & i).Visible = True
            Worksheets("Plan" & i).Select
            Worksheets("Plan" & i).Copy Before:=Sheets(UltPlan)
            ActiveSheet.Name = "Plan" & UltPlan
            Range("B4") = "2020"
        
        Next
        
        Application.DisplayAlerts = True
      

End Sub
 
Postado : 01/09/2016 8:53 am