Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida Simples


knephk

Pergunta

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!

Editado por knephk
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0
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

 

 

 

 

 

Editado por knephk
Link para o comentário
Compartilhar em outros sites

  • 0

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!

Editado por knephk
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

  • 0
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.

 

 

Editado por knephk
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...