Jump to content
Fórum Script Brasil
  • 0

Dúvida Simples


Question

Olá,

 

Estou começando há poucas semanas em VBA. 

Tenho um dúvida;

image.thumb.png.84037fa84c5a91b93981ac5c728f9232.png

Nessa aba, o valor da célula A1 muda constantemente. Eu gostaria que toda vez que ela mudasse, o excel encontrasse (dirigisse a tabela) para o valor correspondente na tabela que vai de A6:A107.

Tentei alguns códigos de VBA, mas não obtive sucesso.

 

Alguém poderia me ajudar?

 

valeu!

Edited by knephk
Link to post
Share on other sites

11 answers to this question

Recommended Posts

  • 0
Posted (edited)
33 minutos atrás, Alyson Ronnan Martins disse:

Não entendi com o valor vai para baixo kkkk

Esqueci de dizer que o número de amarelo está entre 0 e 100 e ele é puxado de outra tabela.

 

Então, quando o número em amarelo mudar, digamos que fosse 58. Eu gostaria que a tabela atual centralizasse o número 58.

 

Eu encontrei esse  código em outro fórum, mas não consigo dar certo...

Dim VisRows As Integer
Dim VisCols As Integer

Application.ScreenUpdating = False
'
' Switch over to the OnCell's workbook and worksheet.
'
OnCell.Parent.Parent.Activate
OnCell.Parent.Activate
'
' Get the number of visible rows and columns for the active window.
'
With ActiveWindow.VisibleRange
    VisRows = .Rows.Count
    VisCols = .Columns.Count
End With
'
' Now, determine what cell we need to GOTO. The GOTO method will
' place that cell reference in the upper left corner of the screen,
' so that reference needs to be VisRows/2 above and VisCols/2 columns
' to the left of the cell we want to center on. Use the MAX function
' to ensure we're not trying to GOTO a cell in row <=0 or column <=0.
'
With Application
    .Goto reference:=OnCell.Parent.Cells( _
        .WorksheetFunction.Max(1, OnCell.Row + _
        (OnCell.Rows.Count / 2) - (VisRows / 2)), _
        .WorksheetFunction.Max(1, OnCell.Column + _
        (OnCell.Columns.Count / 2) - _
        .WorksheetFunction.RoundDown((VisCols / 2), 0))), _
     scroll:=True
End With

OnCell.Select
Application.ScreenUpdating = True

End Sub

 

 

 

 

 

Edited by knephk
Link to post
Share on other sites
  • 0
Posted (edited)

Muito obrigado pela ajuda, de antemão!

 

vamos lá!

 

1) A célula A1 muda de valor constantemente, pois é um link externo. Vai de 1 a 100.

image.thumb.png.3e6ebbe89172e69dbd203b3157221d9b.png

 

2) A tabela vai de 1 a 100. Da célula A3 até A102. 

3) Eu gostaria que sempre que o valor de A1 mudasse, o valor correspondente na tabela de A3:A102 ficasse centralizada no meio da tela.

image.thumb.png.22bd9ee3142589f73f7d9f28b0f2b70d.png

4) Se o valor de A1 mudar para 70, o 70 ficar centralizado na tela.

image.thumb.png.1498fa4ae4563bb754a5778e4189bffb.png

 

Será que você consegue me ajudar?

 

MUITO OBRIGADO!

Edited by knephk
Link to post
Share on other sites
  • 0

Como não consigo ver o seu projeto e imaginar como vai ser esse momento de "atualização do valor.

Segue abaixo o código

Public Sub cmd()
    Dim Linha
    Linha = fnPesquisarPosicao(Range("A1").Value)
    cCentralizarCampo (Linha)
End Sub


Public Function fnPesquisarPosicao(valor)
For x = 3 To 103 Step 1
    If Cells(x, "A").Value = valor Then
        fnPesquisarPosicao = x
    End If
Next x
End Function


Public Sub cCentralizarCampo(Linha)
    With Range("A" & Linha)
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
End Sub

Logo após envio a planilha usada para teste:

https://drive.google.com/open?id=1FI_pmBF2ZAXM_aCczR6bxKHWqQfq8ORK

Link to post
Share on other sites
  • 0
Posted (edited)
8 horas atrás, Alyson Ronnan Martins disse:

Como não consigo ver o seu projeto e imaginar como vai ser esse momento de "atualização do valor.

Segue abaixo o código

Public Sub cmd()
    Dim Linha
    Linha = fnPesquisarPosicao(Range("A1").Value)
    cCentralizarCampo (Linha)
End Sub


Public Function fnPesquisarPosicao(valor)
For x = 3 To 103 Step 1
    If Cells(x, "A").Value = valor Then
        fnPesquisarPosicao = x
    End If
Next x
End Function


Public Sub cCentralizarCampo(Linha)
    With Range("A" & Linha)
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
End Sub

Logo após envio a planilha usada para teste:

https://drive.google.com/open?id=1FI_pmBF2ZAXM_aCczR6bxKHWqQfq8ORK

Obrigado pela resposta Alyson Ronnan.

 

A macro funcionou, mas eu não fui claro sobre o meu problema. E por isso, ela não conseguiu atingir o meu objetivo.

 

A Célula A1 atualiza constantemente, sem necessidade de nenhum comando. É um link DDE.

 

O que eu preciso é que quando essa célula A1 mude de valor, que o excel role e encontre o valor de A1 no intervalo entre A3:A102 e centralize a página nesse valor.

Eu já testei esse código abaixo:

Sub Find_First()
    Dim FindString As Long
    Dim Rng As Range
    FindString = Sheets("Planilha2").Range("A1").Value
    If Trim(FindString) <> "" Then
        With Sheets("Planilha2").Range("A2:A103")
            Set Rng = .Find(What:=FindString, _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
            If Not Rng Is Nothing Then
                Application.Goto Rng, True
               End With
 End Sub

Ele encontra o valor. O problema é que deixa o valor encontrado entrte a3:a100 na primeira linha da página.

 

 

Edited by knephk
Link to post
Share on other sites
  • 0

Boa tarde @knephk.

 Nunca usei um link do tipo DDE. Precisa fazer um teste para identificar quem esta acionando quando a alteração é gerada ela atualização.

Vamos dividor o problema em dois.

1-Momento em que a alteração é realizada (pela atualização do link DDE).
2-Chamar o valor abaixo, entre as linhas "A3:A100".

1: Como não tenho como testar quando a alteração é realizada preciso que você tente descobrir ai.

Exemplos:

image.thumb.png.329fe306879b11478ae06a35a0ac9d07.png

Dentro da sua planilha você pode agenda eventos para alterações(change) ou para calculos(Calcule). Sendo assim tenta colocar um código para exibir mensagem para cada alteração.

Exemplo:

image.thumb.png.f1cac542dfc1f5b7d8b94b5a0d339724.png

Depois de realizar alteração aparece a mensagem:

image.thumb.png.a76031d6a9e13c41a7d88a677bc277a1.png

Claro que seu projeto pode não exibir mensagem no "Change" então precisa testar os outros também para ver quando atualizar e se vai aparecer mensagem.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148680
    • Total Posts
      644501
×
×
  • Create New...