Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

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!!!

Link para o comentário
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

 

Link para o comentário
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

Link para o comentário
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

Link para o comentário
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á, 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...