Existe código dinâm...
 
Notifications
Clear all

Existe código dinâmico?

6 Posts
4 Usuários
0 Reactions
1,724 Visualizações
(@wilker12)
Posts: 36
Eminent Member
Topic starter
 

Olá,

Na tabela, quando insiro em alguma célula o valor =A1, por exemplo, sempre que eu mudo o A1 de posição o código da outra célula também é alterado para a nova posição de A1. Ok, todo mundo sabe, referência dinâmica... Porém, as referências a A1 no código-fonte VBA não são mudadas. Existe código dinâmico também?

Grato! ;)

 
Postado : 17/07/2018 10:28 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Wilker12

Só uma informação, referência dinâmica é uma coisa é tabela dinâmica é outra.

Tabela dinâmica é uma ferramenta do Excel, pesquise no Google que verá como funciona.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 17/07/2018 10:35 am
(@wilker12)
Posts: 36
Eminent Member
Topic starter
 

Vlw, Patropi. Não solucionou a questão mas me trouxe uma boa informação! Até editei o post.

 
Postado : 17/07/2018 10:41 am
(@klarc28)
Posts: 971
Prominent Member
 

ActiveCell refere-se à célula que está selecionada no momento:

Option Explicit

Function MinhaFuncao(ByVal celula As String)
    MsgBox Range(celula).FormulaLocal
End Function

Sub teste()

MinhaFuncao (activecell.address)
End Sub

Outra forma seria perguntar onde está a célula:

Option Explicit

Function MinhaFuncao(ByVal celula As String)
    MsgBox Range(celula).FormulaLocal
End Function

Sub teste()
dim cel as string
cel = inputbox("Informe a célula")
MinhaFuncao (cel)
End Sub
 
Postado : 17/07/2018 11:06 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Boa tarde, Wilker

Não, da forma como vc imagina não é possível. O código no VBA é simplesmente um texto puro que só passa a fazer algo ou retornar algum valor após ser compilado e então executado, portanto ele não pode (e nem deve) ficar alterando conforme as células são movimentadas nas planilhas.

Entretanto, se o intervalo (Range) ou outros objetos como as tabelas (ListObject) ou tabelas dinâmicas (PivotTables) etc. estiver nomeadas o intervalo usado no VBA refletirá corretamente qualquer atualização/movimentação que houver na planilha.

Então, ao invés de uma referência assim: Worksheets("Plan2").Range("B5:D32") poderia usar Range("MeuIntervaloNomeado") caso B5:D32 esteja nomeado lá no Excel.

Outros artifícios que também podem ser usados para prevenir problemas desse tipo são: usar o método Find para localizar uma palavra chave que vc tenha certeza que está em seu intervalo de interesse para retornar a célula; usar a propriedade CurrentRegion para pegar a região em torno de uma célula conhecida; usar as propriedades Offset para obter um intervalo deslocado x linhas/y colunas de um intervalo conhecido; usar referência relativa (estilo L1C1 ao invés de estilo A1); usar ActiveCell quando pertinente; bloquear intervalos e proteger a planilha garantindo que esses intervalos não "saiam do lugar"... dentre outros.

Tudo dependerá do planejamento que vc faz durante a criação de todo seu Worbook (não só do código VBA).

 
Postado : 17/07/2018 11:15 am
(@wilker12)
Posts: 36
Eminent Member
Topic starter
 

É por aí, Edson. Valeu!!

 
Postado : 17/07/2018 11:27 am