none
Alterar nomes de intervalos pelo VBA RRS feed

  • Pergunta

  • Pessoal, preciso criar um código que atualize todos os nomes de uma planilha quando o usuário acionar um botão.

    Criei o seguinte código como exemplo, mas ele tem um problema: somente adiciona nomes aos intervalos. Se por ventura o nome precisar ser alterado (que deve ser o conteúdo de uma outra célula), o código não atualiza o nome. Podem me ajudar com algum comando que faça atualização de nomes já existentes e ao mesmo tempo a inserção de nomes que ainda não existem?

    Outra pergunta: em vez de usar "Refers To R1C1", usando a metodologia R1C1, como eu consigo fazer o comando funcionar com o range normal (A2, C9, D15, etc)?

    Obrigado!

    Sub NomearIntervalos()
    
    RangeName = Range("C5")
    ActiveWorkbook.Names.Add Name:=RangeName, RefersToR1C1:="=Sheet1!R5C4:R5C7"
    
    RangeName = Range("C6")
    ActiveWorkbook.Names.Add Name:=RangeName, RefersToR1C1:="=Sheet1!R6C4:R6C7"
    
    RangeName = Range("C7")
    ActiveWorkbook.Names.Add Name:=RangeName, RefersToR1C1:="=Sheet1!R7C4:R7C7"
    
    RangeName = Range("C8")
    ActiveWorkbook.Names.Add Name:=RangeName, RefersToR1C1:="=Sheet1!R8C4:R8C7"
    
    End Sub
    


    quinta-feira, 20 de outubro de 2016 11:02

Respostas

  • -Que tal você apagar todos os nomes existentes e depois recriá-los com seu código? Ou você tem outros nomes importantes que não pode apagar?

    -Ao invés de usar o parâmetro RefersToR1C1 para criar nomes definidos, use o RefersTo.


    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    quinta-feira, 20 de outubro de 2016 17:05
    Moderador
  • Boa noite Cezário.

    Uma forma alternativa de fazer o que precisa seria utilizar o código abaixo. Nele você pode criar quantos nomes quiser para um mesmo intervalo, mas o código para apagar só funciona se já existir um nome para o intervalo ou se você souber previamente o nome deste intervalo (melhor):

    NomeDesejado = Plan1.Range("A1").Value2 LocalParaNomear = "B1:C3"

    'Para apagar o nome de um intervalo que não se conhece o nome atribuído (gera erro se não houver nenhum nome no intervalo) On Error Resume Next iNomeParaApagar = Plan1.Range(LocalParaNomear).Name.Index ThisWorkbook.Names(iNomeParaApagar).Delete 'Nomeando Plan1.Range(LocalParaNomear).Name = NomeDesejado 'Apagando um nome conhecido (melhor) NomeParaApagar = "Teste" ThisWorkbook.Names(NomeParaApagar).Delete

    Abraço.


    Filipe Magno

    sábado, 22 de outubro de 2016 01:15

Todas as Respostas

  • -Que tal você apagar todos os nomes existentes e depois recriá-los com seu código? Ou você tem outros nomes importantes que não pode apagar?

    -Ao invés de usar o parâmetro RefersToR1C1 para criar nomes definidos, use o RefersTo.


    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    quinta-feira, 20 de outubro de 2016 17:05
    Moderador
  • Boa noite Cezário.

    Uma forma alternativa de fazer o que precisa seria utilizar o código abaixo. Nele você pode criar quantos nomes quiser para um mesmo intervalo, mas o código para apagar só funciona se já existir um nome para o intervalo ou se você souber previamente o nome deste intervalo (melhor):

    NomeDesejado = Plan1.Range("A1").Value2 LocalParaNomear = "B1:C3"

    'Para apagar o nome de um intervalo que não se conhece o nome atribuído (gera erro se não houver nenhum nome no intervalo) On Error Resume Next iNomeParaApagar = Plan1.Range(LocalParaNomear).Name.Index ThisWorkbook.Names(iNomeParaApagar).Delete 'Nomeando Plan1.Range(LocalParaNomear).Name = NomeDesejado 'Apagando um nome conhecido (melhor) NomeParaApagar = "Teste" ThisWorkbook.Names(NomeParaApagar).Delete

    Abraço.


    Filipe Magno

    sábado, 22 de outubro de 2016 01:15
  • Boa tarde!

    Muito obrigado pelas sugestões. Juntei as ideias dos dois e meu código ficou assim (e está funcionando perfeitamente):

    Sub AtualizarNCM()
    
    ThisWorkbook.Activate
    Sheets("NCM Groups").Activate
    For Linha = 3 To Sheets("NCM Groups").UsedRange.Rows.Count
    IntervaloApagar = "D" & Linha & ":M" & Linha
    On Error Resume Next
    NomeApagar = Range(IntervaloApagar).Name.Index
    ThisWorkbook.Names(NomeApagar).Delete
    Next
    
    ThisWorkbook.Activate
    Sheets("NCM Groups").Activate
    For Linha = 3 To Sheets("NCM Groups").UsedRange.Rows.Count
    If Range("C" & Linha).Value = "" Then GoTo Continuar
    NomeAdicionar = Range("C" & Linha).Value
    On Error Resume Next
    Sheets("NCM Groups").Range("D" & Linha & ":M" & Linha).Name = NomeAdicionar
    Continuar:
    Next
    
    MsgBox ("NCMs atualizadas com sucesso!"), vbInformation
    
    End Sub
    
    Abraço!!
    sábado, 22 de outubro de 2016 14:15