Página 1 de 1

Mapa retornar nome do município (ao invés do código do IBGE)

Enviado: 21 Dez 2015 às 18:21
por fmcblues
Olá pessoal,

Minha noção sobre VBA vem quase toda dos ensinamentos do Guru. Fiquei impressionado com os vídeos disponibilizados no youtube e comecei a pesquisar sobre o assunto.
Consegui aplicar e modificar os códigos apresentados nos 3 vídeos de mapas interativos. Tudo funcionando 100% aqui :D . Porém, como uso o mapa com os códigos do IBGE, e não com os nomes dos municípios, quando clico sobre qualquer uma das cidades o msgbox me retorna o código do município.
Estou quebrando a cabeça para tentar fazer um procv no VBA, e retornar o nome do município, ao invés do código, mas sem sucesso até agora.
Todas as minhas planilhas possuem uma coluna com os nomes das cidades e uma com o código do IBGE. Mais ou menos assim:
Município --- Cod_IBGE
Cidade A ----- 2100100
Cidade B ----- 2150350

Ficarei extremamente grato se alguém puder me indicar algum caminho de como retornar o nome do município utilizando o código de colorir mapas apresentado pelo mestre Guru.

Muito obrigado!

Flávio

Mapa retornar nome do município (ao invés do código do IBGE)

Enviado: 22 Dez 2015 às 08:37
por laennder
Tem como você colar a linha de código que está o msgbox? Assim fica mais fácil fazer a devida modificação

Re: Mapa retornar nome do município (ao invés do código do I

Enviado: 22 Dez 2015 às 13:13
por fmcblues
Mestre, eu utilizei este código do seu video 2 sobre mapas:

Sub SelecionarEstado()

Dim sEstado as string
sEstado = Activesheet.shapes(application.caller).name

Msgbox sEstado

End Sub



E depois este, para aplicar a macro de cima em todos os shapes:


Sub Atribuir()

Dim forma as shape

For each forma in activesheet.shapes.range("Grupo 1")
forma.onAction = "SelecionarEstado"

Next

End Sub



Segue um print da planilha. (Não posso enviá-la por ser arquivo do serviço).
Ao lado direito do mapa, há uma tabela enorme de dados, que precisei ocultar. Mas já dá para ver a relação entre os nomes dos municípios com os códigos do IBGE.

Imagem

Agradeço por tentar ajudar tão prontamente.

Muito obrigado,

Flávio

Mapa retornar nome do município (ao invés do código do IBGE)

Enviado: 23 Dez 2015 às 10:17
por Reinaldo
Pelo visto está retornando apenas o nome dado a forma. Como esse nome é o codigo então utilize o metodo Find ou ainda Application.Match

Re: Mapa retornar nome do município (ao invés do código do I

Enviado: 26 Dez 2015 às 15:13
por fmcblues
Excel e VBA são muito interessantes. Mesmo que não tenha conseguido solucionar meu "problema", a cada busca por soluções encontro códigos e dicas diferentes.
Muito obrigado aos que se propuseram a ajudar!

Re: Mapa retornar nome do município (ao invés do código do I

Enviado: 27 Dez 2015 às 09:26
por Reinaldo
A sintaxe de uso para o Find, tente adequar a sua realidade
(Supondo codigo na coluna A, e retornar nome da coluna B)
Código: Selecionar todos
Sub SelecionarEstado()
Dim sEstado As String
sEstado = ActiveSheet.Shapes(Application.Caller).Name

With Sheets("Plan1").Range("A:A") 'Altere para o nome de planilha e coluna desejado
      
    ' Carrega a variavel de Objeto Localizado
    Set Localizado = .Find(sEstado, LookIn:=xlValues, LookAt:=xlPart)  'Para localizar um texto exato na celula, mudar a propriedade para xlWhole
    ' Sempre que a variavel nao for numero ou texto, e ter que carregar algum objeto tem que usar o SET
    
    If Not Localizado Is Nothing Then
        
        MsgBox "Codigo IBGE " & Localizado & " Corresponde ao Estado " & Cells(Localizado.Row, 2)
    
    End If
End With
End Sub
Para utilizar o Match; porem atentar se o valor / coluna procurado é como texto ou numero
Código: Selecionar todos
Sub Uso_Match()
Dim lRow As Long, nRow As Long
sEstado = 9580330 'Atentar se valor é numero ou texto
 'Altere para o nome de planilha e coluna desejado
lRow = Sheets("CEPBRASIL").Cells(Cells.Rows.Count, "A").End(xlUp).Row

nRow = Application.Match(sEstado, Sheets("CEPBRASIL").Range("A1:A" & lRow), 0)
If Not IsError(nRow) Then
    MsgBox "Codigo IBGE " & sEstado & " Corresponde ao Estado " & Cells(nRow, 2)
End If
End Sub

Re: Mapa retornar nome do município (ao invés do código do I

Enviado: 27 Dez 2015 às 15:41
por fmcblues
Grande Reinaldo, você é o cara! :shock:

Sua primeira solução, a do Find, funcionou perfeitamente.
A Msgbox me retorna o nome do município quando clico sobre ele. Fantástico!

Não conhecia o esquema de ter que utilizar o SET, como você deixou explicado no primeiro código: "Sempre que a variável não for numero ou texto, e ter que carregar algum objeto tem que usar o SET".

Agradeço pela grande ajuda! Fico te devendo uma! :D