Notifications
Clear all

Gerenciador de nomes

7 Posts
3 Usuários
0 Reactions
2,115 Visualizações
(@gtsalikis)
Posts: 2373
Noble Member
Topic starter
 

Bom dia,

Estou procurando comandos para manipular os nomes definidos no gerenciador de nomes via VBA, mas acho que não estou sabendo como procurar.

Para definir/alterar um nome eu já tenho:

'cria/altera o nome "PI" com o valor de 3,14
ActiveWorkbook.Names.Add Name:="PI", RefersTo:=3,14

DÚVIDA 1:

Porém, alguém sabe qual comando eu uso para puxar para o VBA o valor do nome?
Deveria ser algo como:

Dim Valor_de_PI as double

Valor_de_PI = ActiveWorkbook.Names("PI").Value

DÚVIDA 2:

Alguém sabe também, se é possível definir um nome do gerenciador de nomes como uma variável do VBA, algo como:

Dim Valor_de_PI as Workbook.Name

Set Valor_de_PI = ActiveWorkbook.Names("PI")

 
Postado : 03/12/2014 6:06 am
(@rlm)
Posts: 0
New Member
 

Gilmar, não entendi direito mas, primeiros cometários:
Uma range nomeada, pode ser referenciada no VBA como se "chama" uma range normal
Supondo: ActiveWorkbook.Names.Add Name:="Col1", RefersToR1C1:="=S6!R3C3:R11C3" --> Range nomeada chamada Col1 referente a planilha S6 range("C3:C11")
stotal = Application.WorksheetFunction.Sum(Range("Col1")) --> obtém a somatória dos valores de Col1.
MsgBox Range("Col1").Address --> mostra mensagem com o "endereço" da range

 
Postado : 03/12/2014 6:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Fala GT, blz cara?

Tenta assim:

DÚVIDA1:

Dim Valor_de_PI as double

Valor_de_PI = ActiveWorkbook.Names("PI").RefersTo

DÚVIDA 2:

Dim Valor_de_PI as Workbook.Name

Set Valor_de_PI = ActiveWorkbook.Names("PI").RefersTo

Qualquer coisa da o grito.
Abraço

 
Postado : 03/12/2014 6:51 am
(@gtsalikis)
Posts: 2373
Noble Member
Topic starter
 

Reinaldo,

Sim, do modo como vc fez, eu já estou utilizando sem problemas em vários casos em que eu tenho uma range nomeada.

Porém, nesse caso em específico, eu usei o gerenciador de nomes para definir valores que não estão na planilha. Por isso, uma instrução como a que vc sugeriu:
Range("Col1")
Não está funcionando, exatamente por não ter um range.

A indicação do Bernardo respondeu a minha primeira dúvida, mas a segunda não.

 
Postado : 03/12/2014 7:23 am
(@gtsalikis)
Posts: 2373
Noble Member
Topic starter
 

Grande, Bernardo.

Essa parte funcionou perfeitamente (já posso implementar o que eu preciso).

DÚVIDA1:

Dim Valor_de_PI as double

Valor_de_PI = ActiveWorkbook.Names("PI").RefersTo

Essa parte, contudo, não funcionou. Não consigo declarar uma variável "as Workbook.Name".
Mesmo declarando como variant, também não deu certo para atribuir a um nome.

Não que eu precise dessa parte (pois com o caso anterior, já posso seguir com o código).
Mas, se alguém souber, seria muito útil.

DÚVIDA 2:

Dim Valor_de_PI as Workbook.Name

Set Valor_de_PI = ActiveWorkbook.Names("PI").RefersTo

Abraço, cara, valeu.

 
Postado : 03/12/2014 7:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Gtsalikis, tambem não sei se entendi corretamente, mas se não chegou a ver ainda, de uma olhada nestes links se ajudam :

Introduction To Defined Names
http://www.cpearson.com/excel/DefinedNames.aspx

http://www.vbaexpress.com/kb/getarticle.php?kb_id=696

[]s

 
Postado : 03/12/2014 7:46 am
(@gtsalikis)
Posts: 2373
Noble Member
Topic starter
 

Mauro, a tua resposta me ajudou tb. Deu pra perceber que o que eu queria não funciona exatamente como imaginava. Além de estar cometendo um erro básico - eu estava declarando a variável as workbook.name, quando deveria ser apenas as name.

Assim funcionou:

Dim PI_var As Name

Set PI_var = ThisWorkbook.Names("PI_nome")

PI_var.Value = 3.14

Porém, para pegar o valor de volta do nome, não dá pra ir direto igual se faz com um range, então tive que fazer assim:

Dim teste As Double

teste = Mid(PI_var.Value, 2)

Obrigado a todos, abraço

 
Postado : 03/12/2014 6:48 pm