Página 1 de 1

Caixa de Seleção de Planilhas

Enviado: 15 Mai 2017 às 10:22
por GabrielCD
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! :)

Caixa de Seleção de Planilhas

Enviado: 15 Mai 2017 às 13:25
por PietroFarias
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

Re: Caixa de Seleção de Planilhas

Enviado: 15 Mai 2017 às 15:37
por GabrielCD
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?