Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por GabrielCD
#23141
Bom dia! Primeira postagem aqui! :mrgreen:

Bom, criei uma macro na minha empresa que faz a coleta de dados de duas planilhas. Quando eu a usava apenas em meu computador, usava o comando "Workbooks.Open Filename" seguido do caminho para abri-las.

O problema é que agora a planilha será usada em várias máquinas, com sistemas operacionais diferentes. Então eu tenho que bolar uma solução que não necessite ficar trocando o caminho em cada computador.

Pesquisei na internet e encontrei a seguinte solução (retirado do site guiamacroexcel):
Código: Selecionar todos
Function AbrirArquivo()

    Dim Caminho As String 'Caminho do arquivo
    Dim fDialog As Office.FileDialog
    
    'Configura caixa de seleção do arquivo
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
    With fDialog
        .AllowMultiSelect = False 'Habilita ou desabilita a seleção de múltiplos arquivos
        .Title = "Selecionar arquivo..."
        '.InitialFileName =  'Caminho inicial para seleção, não utilizado no exemplo
        
        'Configura filtros da caixa de seleção
        .Filters.Clear 'Limpa os filtros
        .Filters.Add "Arquivos Excel - .xlsb", "*.xlsb" 'Adiciona filtro para arquivos .xlsb
        .Filters.Add "Arquivos Excel - .xls", "*.xls" 'Adiciona filtro para arquivos .xlsb
        
        If .Show = True Then    'Se o parâmetro .Show for igual à True significa
                                'que algum arquivo foi selecionado
            Caminho = .SelectedItems.Item(1)    'Local + arquivo selecionados são passados para
                                                'a variável chamada de "Caminho"
        Else
            MsgBox "Você clicou em cancelar"
        End If
        
    End With

    AbrirArquivo = Caminho 'Atribui o caminho do arquivo ao retorno da função

End Function
Pelo o que eu entendi, o que esse comando faz é copiar o caminho do arquivo que foi selecionado manualmente, mas não a abre. Eu gostaria de saber duas coisas, (se possível, é claro :D )

Como "continuo" esse comando para que ele também abra a planilha automaticamente?

Essa solução funciona em ambos sistemas operacionais? (Mac e Windows)

Obrigado! :)
Avatar do usuário
Por PietroFarias
Posts Avatar
#23150
Sobre o comando funcionar no Mac e windows não sei dizer. Não tenho experiência no VBA do Mac.

Mas para abrir o arquivo você pode usar o valor retornado em fDialog:
Código: Selecionar todos
Function AbrirArquivo()

    Dim Caminho As String 'Caminho do arquivo
    Dim fDialog As Office.FileDialog
    
    'Configura caixa de seleção do arquivo
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
    With fDialog
        .AllowMultiSelect = False 'Habilita ou desabilita a seleção de múltiplos arquivos
        .Title = "Selecionar arquivo..."
        '.InitialFileName =  'Caminho inicial para seleção, não utilizado no exemplo
        
        'Configura filtros da caixa de seleção
        .Filters.Clear 'Limpa os filtros
        .Filters.Add "Arquivos Excel - .xlsb", "*.xlsb" 'Adiciona filtro para arquivos .xlsb
        .Filters.Add "Arquivos Excel - .xls", "*.xls" 'Adiciona filtro para arquivos .xlsb
        
        If .Show = True Then    'Se o parâmetro .Show for igual à True significa
                                'que algum arquivo foi selecionado
            Caminho = .SelectedItems.Item(1)    'Local + arquivo selecionados são passados para
                                                'a variável chamada de "Caminho"
        Else
            MsgBox "Você clicou em cancelar"
        End If
        
    End With

    AbrirArquivo = Caminho 'Atribui o caminho do arquivo ao retorno da função
    
    Workbooks.Open (Caminho)

End Function
Por GabrielCD
#23160
PietroFarias escreveu:Sobre o comando funcionar no Mac e windows não sei dizer. Não tenho experiência no VBA do Mac.

Mas para abrir o arquivo você pode usar o valor retornado em fDialog:
Obrigado meu caro! Funcionou perfeitamente! :)

Sem querer abusar da boa vontade alheia, mas já abusando, há alguma forma de eu referenciar a planilha externa sem ser citando pelo nome?

Por exemplo, quando eu quero fazer alguma ação, normalmente uso o comando:
Código: Selecionar todos
Workbooks("Planilha.xlsx").Worksheets("Aba").Range("A1")
O problema é que, fazendo isso, o usuário sempre vai ter que renomear o arquivo para o Excel o identificar. Há alguma forma de resolver isso?
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord