Notifications
Clear all

Vba para preencher RefersTo dentro do gerenciador de nomes

5 Posts
2 Usuários
0 Reactions
1,149 Visualizações
(@mmelo81)
Posts: 3
New Member
Topic starter
 

Ola Pessoal, primeiramente cumprimenta-los , pois sou novo no forum.

Estou com um problema em uma macro em que ja efetuei diversas pesquisas pra resolver mas sem sucesso.

Eu tenho uma macro que pega um conteúdo de uma célula e depois esse conteúdo é inserido dentro do gerenciador de nomes do Excel. A macro funciona, porém, quando o conteúdo da célula é enviado para o gerenciador de nomes no RefersTo: o conteúdo vai com aspas duplas e com isso esse nome não funciona corretamente em uma outra função que tenho.

Codigo que executo
Sub MailRange()
'Captura conteudo da celula
LocalCel = Range("AG2").Value

"Ativa nome dentro do gerenciador e insere o conteudo da celula
ActiveWorkbook.Names.Add Name:="teste", RefersToR1C1Local:= LocalCel

End Sub

'O conteudo da celula é Mailing!$A$7:$A$8, porem, quando vai para o gerenciador de nomes ele sai com aspas duplas desse jeito >> "Mailing!$A$7:$A$8", e com isso, a outra função que executo nao funciona por conta das aspas.
Ja tentei até aplicar o replace, mas sem sucesso

alguem sabe como resolver isso?

Agradeço muito de puderem ajudar!

At

marcos

 
Postado : 01/06/2017 6:16 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Creio que a "melhor" sintaxe para adicionar Nomes via VBa é:
ActiveWorkbook.Names.Add Name:="Grid", RefersToR1C1:="=S6!R3C3:R11C11"

Note que o sinal de igual e parte do endereçamento, e o endereço e fornecido no estilo RC --> R=Row (Linha) e C=Column (Coluna)

Assim Experimente:

Em AG2 utilize--> AG2=

'=Mailing!R7C1:R8C1

Sua Rotina:

Sub MailRange()
'Captura conteudo da celula
LocalCel = Range("AG2").Value

'"Ativa nome dentro do gerenciador e insere o conteudo da celula
ActiveWorkbook.Names.Add Name:="teste1", RefersToR1C1:=LocalCel

End Sub

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

 
Postado : 01/06/2017 7:30 am
(@mmelo81)
Posts: 3
New Member
Topic starter
 

Ola Reinaldo,

testei o que me passou, só que ele esta definindo um valor fixo, ou seja, esta sempre definindo Mailing!$A$7:$A$8, e o valor da célula AG2 muda constatemente, exemplo
ela pode alterar de Mailing!$A$7:$A$8 para Mailing!$A$7:$A$15 e assim vai.
será que da pra criar uma variável que consiga mudar a parte R7C1:R8C1?

 
Postado : 01/06/2017 7:59 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Respondendo sua pergunta, diretamente, assim:

ActiveWorkbook.Names.Add Name:="teste", RefersToR1C1Local:= LocalCel

Esse LocalCel tem que ter um intervalo válido que comece com o sinal de igual... neste caso a célula deveria conter: =Mailing!$A$7:$A$8
Mas ela não contém isso, até pq se vc deixar assim, a fórmula vai funcionar e vai dar erro pq é uma matriz. Vc poderia colocar assim:

 ="=Mailing!$A$7:$A$8" 

Pq daí, o resultado da fórmula, é uma fórmula válida... a alternativa, seria mexer no seu código e meter um = no refersto, assim:

ActiveWorkbook.Names.Add Name:="teste", RefersToR1C1Local:= "=" & LocalCel

MAS, eu tenho uma ideia melhor... Leia abaixo:

Pq vc não usa um intervalo dinâmico feito com desloc()?
Daí vc nunca mais vai precisar se preocupar com recriar o nome...

Manda por favor um print dessa coluna Mailing!$A$7:$A$15...

Quero ver o que tem acima e abaixo dela... para poder montar o desloc() pra vc...

Mas de cara, se estiver em branco logo acima e sua lista não tiver título... use:

=DESLOC(Mailing!$A$7;0;0;CONT.VALORES(Mailing!$A:$A);1)

Deu pra entender ?
A explicação, aqui ó:
viewtopic.php?t=98#p250

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

 
Postado : 01/06/2017 9:41 am
(@mmelo81)
Posts: 3
New Member
Topic starter
 

Eu consegui resolver da seguinte forma:

Sub Teste()
'Localiza a coluna a partir da célula inicial que defini
ultima = Range("A2").End(xlDown).Row
'Procura a ultima célula preenchida, define a range e seleciona
Range("A2:A" & ultima).Select
'Envia a seleção para o RefersTo com selection.
ActiveWorkbook.Names.Add Name:="_table", RefersTo:=Selection
         
End Sub

Assim ele pega o intervalo correto e envia para o RefersTo sem aspas duplas.

Agradeço muito sua ajuda sobre o "estilo RC", pois ela tmb me ajudou a ajustar um outro código que tenho !!
Abraços!

At

Marcos

 
Postado : 02/06/2017 6:04 am