Ir ao conteúdo
  • Cadastre-se
Vinicius Passsos

Xl vba - como conseguir o país do usuário

Recommended Posts

Pessoal, tudo bom?

 

Sou iniciante em VBA e basicamente faço os códigos catando tecos de códigos prontos na internet. Não tenho a pretensão de ser programador mas criar certas ferramentas no excel facilita minha vida.

 

estou parado em um pedaço do meu código que é o seguinte: preciso saber qual o país do usuário da planilha.

Esta planilha é usada por diversos setores da empresa no mundo todo, e ela gera um código que é o ano, o numero do formulário e o país em que ele foi gerado.

 

Só preciso de uma função, ou de uma forma de descobrir por VBA, qual o país do usuário.

 

O máximo que consegui foi o country code, com aquelas funções de application.internacional, mas por exemplo o country code do canadá e dos estados unidos são os mesmos....então já não me serve.

 

Será que vocês conseguem me ajudar??

Muito obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em alguns pedaços desse código tem o q você quer.

Option Explicit
Const sResourcePrefix As String = "RES_"

'Get Culture
Private Function GetATPUICultureTag() As String
    Dim shTemp As Worksheet
    Dim sCulture As String
    Dim sSheetName As String
    
    sCulture = Application.International(xlUICultureTag)
    sSheetName = sResourcePrefix + sCulture
    
    On Error Resume Next
    Set shTemp = ThisWorkbook.Worksheets(sSheetName)
    On Error GoTo 0
    If shTemp Is Nothing Then sCulture = GetFallbackTag(sCulture)
    
    GetATPUICultureTag = sCulture
End Function

'Entry point for RibbonX button click
Sub ShowATPDialog(control As IRibbonControl)
    Application.Run ("fDialog")
End Sub

'Callback for RibbonX button label
Sub GetATPLabel(control As IRibbonControl, ByRef label)
    label = ThisWorkbook.Sheets(sResourcePrefix + GetATPUICultureTag()).Range("RibbonCommand").Value
End Sub

'Callback for screentip
Public Sub GetATPScreenTip(control As IRibbonControl, ByRef label)
    label = ThisWorkbook.Sheets(sResourcePrefix + GetATPUICultureTag()).Range("ScreenTip").Value
End Sub

'Callback for Super Tip
Public Sub GetATPSuperTip(control As IRibbonControl, ByRef label)
    label = ThisWorkbook.Sheets(sResourcePrefix + GetATPUICultureTag()).Range("SuperTip").Value
End Sub

Public Sub GetGroupName(control As IRibbonControl, ByRef label)
    label = ThisWorkbook.Sheets(sResourcePrefix + GetATPUICultureTag()).Range("GroupName").Value
End Sub

'Check for Fallback Languages
Private Function GetFallbackTag(szCulture As String) As String
    'Sorted alphabetically by returned culture tag, then input culture tag
    Select Case (szCulture)
        Case "rm-CH"
            GetFallbackTag = "de-DE"
        Case "ca-ES", "ca-ES-valencia", "eu-ES", "gl-ES"
            GetFallbackTag = "es-ES"
        Case "lb-LU"
            GetFallbackTag = "fr-FR"
        Case "nn-NO"
            GetFallbackTag = "nb-NO"
        Case "be-BY", "ky-KG", "tg-Cyrl-TJ", "tt-RU", "uz-Latn-UZ"
            GetFallbackTag = "ru-RU"
        Case Else
            GetFallbackTag = "en-US"
    End Select
End Function

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Vinicius Passsos seja bem vindo ao forum.

3 horas atrás, Vinicius Passsos disse:

O máximo que consegui foi o country code, com aquelas funções de application.internacional, mas por exemplo o country code do canadá e dos estados unidos são os mesmos....então já não me serve.

 

Minha sugestão é voce obter country code em seguida obter o codigo da language culture name ( ex.: "pt-BR" ), e comparar com o codigo do usuario.

Tabela Language Culture Names

 

Veja o exemplo em anexo se lhe atende:

 

 

Info User Country.zip

Compartilhar este post


Link para o post
Compartilhar em outros sites

DJ, confesso que não consegui executar seu código.

 

Abri um excel novo, colei no vba e não consegui rodar. Será que esqueci algum passo.

 

Basole, seu código de exemplo está bacana!! Agora estou tentando destrinchá-lo(muuuito F8) para entender como ele funciona e ver se consigo aplicar!

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

A principio usaria somente a funcao " GetCountryInfo" (Application.International(xlCountryCode)), para retornar o nome do país. 

Mas como o codigo ( por exemplo ), dos Estados Unidos é igual ao do Canada então a funcao "GetCultureInfo" retorna o  codigo da "language culture name", pois essa linguagem difere com a do Canadá e se a linguagem local for "en-US" retornará Estados Unidos e caso "en-CA" ou "fr-CA" retornará Canadá, 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×