Alterar Resolução d...
 
Notifications
Clear all

Alterar Resolução de Tela

14 Posts
2 Usuários
0 Reactions
8,426 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Fiz uma planilha em um not 14,1 com resolução de tela de 1024x768 .Ajeitei a plan de maneira que ela ocupasse toda a tela do not , mas dependendo da resolução do PC em que vou abri-la , ou fica muito grande ou fica pequena então:
Alguem tem um código onde independente da resolução do PC onde for abrir a plan , a aparencia dela seja a mesma.
Exemplo:
Em 1280x768 a aparencia ideal é com zoom de 120%
Em 1365x768 a aparencia ideal é com zoom de 130%
Em 1360x768 a aparencia ideal é com zoom de 130%
Em 1280x720 a aparencia ideal é com zoom de 120%
Em 1280x600 a aparencia ideal é com zoom de 120%
Em 1024x768 a aparencia ideal é com zoom de 95%
Em 800x600 a aparencia ideal é com zoom de 75%

Vi a algum tempo atrás em algum lugar um código que alterava a resolução , mas o ideal seria a alteração ser somente em Esta Pasta de Trabalho , para não atrapalhar outros aplicativos do usuário.(Se alguem tiver o código, e puder , favor comenta-lo detalhadamente, para que possa aprender)
No aguardo das costumeiras soluções que me dão.

 
Postado : 28/06/2012 6:43 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite Claudinei

Veja se o tópico deste fórum pode te ajudar:

http://info.abril.com.br/forum/viewtopi ... 101&t=1955

Um abraço.

 
Postado : 28/06/2012 7:25 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Legal o código Patropi , mas a planilha vai ser usada por mais ou menos umas 50 pessoas e se eu alterar a resolução de tela deles acho que não vai ser legal .
Então o que tava pensando era alguma coisa do tipo , Em 1280x768 a aparencia ideal é com zoom de 120%
IF resolução = 1365x768 then
zoom de 130%
IF resolução = 1360x768 then
zoom de 130%
IF resolução = 1280x720 then zoom de 120% e assim por diante ; mas não sei como escrever

 
Postado : 28/06/2012 8:32 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Acho que seria por aqui

Option Explicit

Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Sub VerifyScreenResolution(Optional Dummy As Integer)

Dim x As Long
Dim y As Long
Dim MyMessage As String
Dim MyResponse As VbMsgBoxResult

x = GetSystemMetrics(SM_CXSCREEN)
y = GetSystemMetrics(SM_CYSCREEN)

If x = 800 And y = 600 Then
zoom = 75
If x = 1024 And y = 768 Then
zoom = 95
If x = 1280 And y = 600 Then
zoom = 120
If x = 1280 And y = 720 Then
zoom = 120
If x = 1280 And y = 768 Then
zoom = 120
If x = 1360 And y = 768 Then
zoom = 130
If x = 1366 And y = 768 Then
zoom = 130

Else
End If
End If
End If
End If
End If
End If
End If
End Sub

 
Postado : 28/06/2012 9:23 pm
(@benzadeus)
Posts: 78
Trusted Member
 

Repito o trecho da minha página: "Sobre como alterar a resolução do sistema, surgiro que isso não seja feito. A última solução para que você resolva um problema em seu sistema é alterar a interface do usuário. Acredite, ele não vai gostar. Além disso, muitos monitores ou laptops não suportam alguns tipos de resolução, podendo travar o computador do usuário durante essa alteração. Tem os casos também em que os computadores não tem permissão para alterar configurações de resolução (usuários corporativos). Para esses casos, o erro pode ser inesperado."
http://www.ambienteoffice.com.br/office ... ticamente/

 
Postado : 29/06/2012 6:31 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Meio complicado mas resolvi, coloquei este código dentro de cada planilha , porem precisava saber todas as resoluções possiveis ,ai ficava "chique nu urtimo".

Option Explicit
 
Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Private Sub Worksheet_Activate()
Dim x  As Long
    Dim y  As Long
    Dim zoom As Long
    x = GetSystemMetrics(SM_CXSCREEN)
    y = GetSystemMetrics(SM_CYSCREEN)

If x = 1024 And y = 768 Then
ActiveWindow.zoom = 48

Else
If x = 1152 And y = 864 Then
ActiveWindow.zoom = 55

Else
If x = 800 And y = 600 Then
ActiveWindow.zoom = 37

Else
If x = 1280 And y = 768 Or x = 1280 And y = 720 Or x = 1280 And _
y = 600 Or x = 1280 And y = 1024 Or x = 1280 And y = 960 Then
ActiveWindow.zoom = 61

Else
If x = 1366 And y = 768 Or x = 1360 And y = 768 Then
ActiveWindow.zoom = 110

End If
End If
End If
End If
End If

End Sub
 
Postado : 29/06/2012 12:32 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Para resolver com código simples, mas olhando por outro foco, sem pensar na resolução, e sim na área visível da tela, o Excel já faz isso sozinho, nao precisamos ficar reinventando a roda, muito menos usando códigos que podem falhar em outras versões do Excel. (API, 32bits, 64bits, vcs que programam, sabem do que estou falando)

Então, cole este código no na folha de código de todas planilhas:

Private Sub Worksheet_Activate()
Dim rngSelection    As Range
Dim lRow            As Long
Dim lCol            As Long
    
    If TypeName(Selection) = "Range" Then Set rngSelection = Selection
    With ActiveWindow
        lRow = .ScrollRow
        lCol = .ScrollColumn
        .ScrollRow = 1
        .ScrollColumn = 1
        ActiveSheet.Range("A1:J1").Select
        .Zoom = True
        .ScrollRow = lRow
        .ScrollColumn = lCol
    End With
    
    If Not rngSelection Is Nothing Then
        rngSelection.Select
        Set rngSelection = Nothing
    End If
    
End Sub

Neste caso, utilizei um recurso conhecido do Excel, de ajustar o zoom a uma seleção.
Ou seja, no código você precisará alterar o A1:J1, para colocar o q é melhor, para o caso de cada planilha.

Se vc quiser que o zoom fique acertado para colunas de A a Q, então troque para A1:Q1, entendeu?

Veja se funciona e nos fale.

Abraço,

F.F.

 
Postado : 29/06/2012 7:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

PERFEITISSIMO.
Valeu Fernado , vc pediu para ver se funciona ; vc não é o Fernando Fernandes (de Nova York, se não for, coincidencia do cace... ;2 e com os mesmos conhecimentos) , quando vi falei; testar pra que? é colar e funcionar.

Se for possivel poderia comentar o código para que eu possa "juntar as partes" numa proxima vez , porque vc me deu o peixe , agora to pedindo pra aprender a pescar, rsrsrsrs.

Muitissimo obrigado.

 
Postado : 29/06/2012 7:55 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Oi Claudinei, sou eu mesmo. Fiquei longe um tempo, agora estou de volta (em São Paulo e no Forum), não sei por quanto tempo, rs
Que bom que deu certo, eu nem tinha testado, :D

Para comentar o código, preciso explicar a lógica.
Pensei: ok, temos que redimensionar a tela de alguma maneira. Mas para redimensionar, este código depende de selecionar as células para as quais você quer ajustar o zoom. E não podemos perder a seleção anterior, pq, imagina só, o cara vai numa célula olha pra ela, seleciona ela, lá embaixo no fundo da plan, demorou, mas encontrou a mardita célula que ele queria. Daí ele vai em outra planilha, pra copiar um valor de lá e colocar de volta na célula que estava selecionada. Pronto, se eu simplesmente usasse o código que seleciona as células da linha 1, sem pensar no que estava selecionado antes, o cara ia dar uma cacetada na mesa :evil:, xingar até a mãe do juiz :twisted:, e teria que procurar aquela célula de novo, que agora ele não lembra onde está :roll:.

Então, no código, eu precisei guardar os detalhes de posicionamento de tela, e da célula selecionada, para poder recuperá-los posteriormente. Eu só não gostei de rodar esse código toda vez, no evento sheet_activate. Mas aí é gosto do cliente, rs

Ok vamos ao código.

Private Sub Worksheet_Activate()
'Declaração de objetos e variáveis
Dim rngSelection As Range
Dim lRow As Long
Dim lCol As Long

'Verificando se a seleção atual é de uma célula (poderia ser uma imagem ou um gráfico, não tratados nesse código)
'Se a seleção for uma célula, registrando que célula é essa no objeto rngSelection

If TypeName(Selection) = "Range" Then Set rngSelection = Selection

With ActiveWindow
'ScrollRow e ScrollCol são propriedades do objeto window, que indicam qual a primeira linha e coluna da janela ativa, sendo vistas pelo Excel, respectivamente.
'Guardei seus resultados atuais nestas variáveis, só para poder recuperá-los mais tarde

lRow = .ScrollRow
lCol = .ScrollColumn

'Alterei os ScrollRow e ScrollCol para 1, garantindo que a primeira célula visível à esquerda é a célula A1
.ScrollRow = 1
.ScrollColumn = 1

'Selecionar de A a J
ActiveSheet.Range("A1:J1").Select
'Esta é a "mágica" do código. que acerta o zoom para a área selecionada acima
.Zoom = True

'Pronto, tudo feito, agora é hora de recuperar o posicionamento de tela para aonde estava antes
.ScrollRow = lRow
.ScrollColumn = lCol
End With

If Not rngSelection Is Nothing Then
'e pra finalizar, agora que a tela voltou aonde estava, mas com outro zoom, hora de selecionar de volta aquela célula q estava selecionada
rngSelection.Select
'destruindo as referencias ao objeto, em memória.
Set rngSelection = Nothing
End If

'FIM
End Sub

 
Postado : 29/06/2012 8:26 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ok Fernando muito obrigado , como sempre sua explicação é aula.

Então, no código, eu precisei guardar os detalhes de posicionamento de tela, e da célula selecionada, para poder recuperá-los posteriormente. Eu só não gostei de rodar esse código toda vez, no evento sheet_activate. Mas aí é gosto do cliente, rs

Como vc mesmo disse a respeito de rodar no sheet_activate , realmente toda vez é foda , teria como quando abrisse a pasta , automaticamente "passar por todas as plans" que necessitam do "ajuste"; rodar (ajustar) e desativar o código? ativando somente numa proxima abertura da pasta?

 
Postado : 29/06/2012 9:09 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Aê, agora sim, é exatamente isso que eu tinha pensado.
Me dá uns 5 minutos, ;) ok ok uns 15 minutos e eu coloco novo código aqui.

mas esse eu não vou comentar não, mas ele vai ser autoexplicativo. Combinado?
:)

 
Postado : 29/06/2012 9:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

de novo, não testei, mas deve estar funcionando:

Private Sub Workbook_Open()
On Error GoTo Finalizar
'declaração de variáveis e objetos

Dim shtSelected As Worksheet
Dim sht         As Worksheet
Dim strColunas  As String
Dim blPulaPlan  As Boolean
    
'Desligando o Refresh de tela, para vc não ver o Excel piscando na hora de rodar o código
    Application.ScreenUpdating = False
    
    Set shtSelected = ActiveSheet
'estrutura de repetição, para varrer todas as planilhas
    For Each sht In ThisWorkbook.Worksheets
        
'resolvi q só vou acertar o zoom das planilhas que de fato estiverem visíveis
        If sht.Visible = xlSheetVisible Then
            
'seleciona a planilha da vez
            sht.Select
            
'Dependendo do nome da planilha, este código vai determinar um endereço diferente, pq cada caso é um caso
            Select Case sht.Name
            
'---------------------------------------------------------------------------
'troque o nome plan1 para um nome de planilha que exista
                Case "Plan1"
'troque o endereço da plan deste caso, aqui na strColunas abaixo
                    strColunas = "A1:J1"
'---------------------------------------------------------------------------

'estas duas linhas acima (6 com os comentários, rs) podem ser replicadas (como abaixo) quantas vezes você quiser
'lembre-se de trocar o nome da planilha e o endereço para o zoom, como eu fiz abaixo para exemplificar

                Case "Plan2"
                    strColunas = "A1:M1"
                
                Case "Plan3"
                    strColunas = "A1:F1"
                
                Case "Plan4"
                    strColunas = "A1:G1"
                
                Case "Plan5"
                    strColunas = "A1:J1"
                
'Case Else é tipo, caso a plan não esteja listada acima, eu defini uma variável blPulaPlan, para pular esta planilha
'Isso pq esse For/Next está varrendo todas as planilhas.
                Case Else
                    blPulaPlan = True
                    
            End Select
'aqui eu defini que,
            If Not blPulaPlan Then
'se não é pra pular a plan, então chame a rotina AjustarZooom (igual à rotina q você já viu)
                Call AjustarZoom(sht, strColunas)
            Else
'se era pra pular a plan, então blPulaPlan está verdadeiro, e preciso torná-lo falso para a próxima rodada. esse Not INVERTE o valor de uma variável booleana
                blPulaPlan = Not blPulaPlan
            End If
        End If
    Next sht
    shtSelected.Select
    Set shtSelected = Nothing

Finalizar:
    Application.ScreenUpdating = True

End Sub

Private Sub AjustarZoom(ByRef sht As Worksheet, ByVal strColunas As String)
'Declaração de objetos e variáveis
Dim rngSelection As Range
Dim lRow As Long
Dim lCol As Long

'Verificando se a seleção atual é de uma célula (poderia ser uma imagem ou um gráfico, não tratados nesse código)
'Se a seleção for uma célula, registrando que célula é essa no objeto rngSelection
    If TypeName(Selection) = "Range" Then Set rngSelection = Selection

    With ActiveWindow
'ScrollRow e ScrollCol são propriedades do objeto window, que indicam qual a primeira linha e coluna da janela ativa, sendo vistas pelo Excel, respectivamente.
'Guardei seus resultados atuais nestas variáveis, só para poder recuperá-los mais tarde
        lRow = .ScrollRow
        lCol = .ScrollColumn

'Alterei os ScrollRow e ScrollCol para 1, garantindo que a primeira célula visível à esquerda é a célula A1
        .ScrollRow = 1
        .ScrollColumn = 1

'Selecionar de A a J
        sht.Range("A1:J1").Select
'Esta é a "mágica" do código. que acerta o zoom para a área selecionada acima
        .Zoom = True


'Pronto, tudo feito, agora é hora de recuperar o posicionamento de tela para aonde estava antes
        .ScrollRow = lRow
        .ScrollColumn = lCol
    End With

    If Not rngSelection Is Nothing Then
'e pra finalizar, agora que a tela voltou aonde estava, mas com outro zoom, hora de selecionar de volta aquela célula q estava selecionada
        rngSelection.Select
'destruindo as referencias ao objeto, em memória.
        Set rngSelection = Nothing
    End If

'FIM
End Sub
 
Postado : 29/06/2012 9:40 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Por favor não me chama de folgado, me chama de burrro.
É o seguinte , minha pasta "Original" tem 5 Plans , Plan1(RESUMO) ,Plan2(Faixa) , Plan3(Produtividade) , Plan4(ASD), Plan5(BDAlimentadores) e funciona assim :
1-somente uma plan fica visivel por vez,
2- a Plan inicial sempre è RESUMO ,
3-a Plan2 sempre fica oculta , e só serve como modelo para cópias que usuario faz da mesma, e DÁ NOVOS NOMES que sempre são iniciados por "Faixa_" ;e são Plan>5
4-então onde vc colocou "CASE nome da Plan" só posso nomear as Plans 1, 3, 4 pois haverá novas plan com nomes ainda desconhecidos
5-a plan 5 nunca fica visivel, são só dados

 
Postado : 29/06/2012 10:12 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

ahauhauha ok ... mas sugestão, já que o assunto deu uma leve mudada agora... o novo assunto é, como fazer um código específico rodar nas planilhas independente do nome.
Cria outro tópico, e eu te ajudo lá no outro. Até pq, este aqui já estava resolvido e agora está aberto de novo, entende?

Mas parece simples viu, não se preocupe!
Inclua seu arquivo, se puder, para eu poder aplicar a alteração de código direto nele.

 
Postado : 30/06/2012 7:56 am