knephk 0 Posted May 11, 2020 Report Share Posted May 11, 2020 (edited) Olá, Estou começando há poucas semanas em VBA. Tenho um dúvida; 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 May 11, 2020 by knephk Quote Link to post Share on other sites
0 Alyson Ronnan Martins 0 Posted May 12, 2020 Report Share Posted May 12, 2020 Boa tarde. Poderia me tirar duvida sobre seu projeto? Quote Link to post Share on other sites
0 knephk 0 Posted May 12, 2020 Author Report Share Posted May 12, 2020 1 hora atrás, Alyson Ronnan Martins disse: Boa tarde. Poderia me tirar duvida sobre seu projeto? claro. o que deseja saber? Quote Link to post Share on other sites
0 Alyson Ronnan Martins 0 Posted May 12, 2020 Report Share Posted May 12, 2020 Não entendi com o valor vai para baixo kkkk Quote Link to post Share on other sites
0 Alyson Ronnan Martins 0 Posted May 12, 2020 Report Share Posted May 12, 2020 Teria como colocar um exemplo manual "pequeno" exemplo. Quote Link to post Share on other sites
0 knephk 0 Posted May 12, 2020 Author Report Share Posted May 12, 2020 (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 May 12, 2020 by knephk Quote Link to post Share on other sites
0 Alyson Ronnan Martins 0 Posted May 12, 2020 Report Share Posted May 12, 2020 manda um exemplo para eu criar agora aqui. (tipo a tabela preenchida para ver aonde vai) Vou ficar acordado até as 11:50 hoje esse negócio sai kkkkk Quote Link to post Share on other sites
0 knephk 0 Posted May 13, 2020 Author Report Share Posted May 13, 2020 (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. 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. 4) Se o valor de A1 mudar para 70, o 70 ficar centralizado na tela. Será que você consegue me ajudar? MUITO OBRIGADO! Edited May 13, 2020 by knephk Quote Link to post Share on other sites
0 Alyson Ronnan Martins 0 Posted May 13, 2020 Report Share Posted May 13, 2020 duvida na palavra "centralizado": é assim? Quote Link to post Share on other sites
0 Alyson Ronnan Martins 0 Posted May 13, 2020 Report Share Posted May 13, 2020 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 Quote Link to post Share on other sites
0 knephk 0 Posted May 13, 2020 Author Report Share Posted May 13, 2020 (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 May 13, 2020 by knephk Quote Link to post Share on other sites
0 Alyson Ronnan Martins 0 Posted May 14, 2020 Report Share Posted May 14, 2020 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: 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: Depois de realizar alteração aparece a mensagem: 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. Quote Link to post Share on other sites
Question
knephk 0
Olá,
Estou começando há poucas semanas em VBA.
Tenho um dúvida;
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 knephkLink to post
Share on other sites
11 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.