Notifications
Clear all

Localizar e Importar Arquivo em Local desconhecido

12 Posts
2 Usuários
0 Reactions
1,862 Visualizações
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Preciso Importar a planilha Relatorio na HD, do arquivo com o nome intra_financiamento_imobiliario.xls.
Precisa ser o relatório mais atual, e o usuário não sabe em qual Diretório o arquivo se encontra.
Como fazer em VBA?
Grato,
Pedro

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 24/03/2014 10:05 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite!!

A busca não pode ser feita, manualmente?

Sub NaoTestado()

Dim strDirectory, strFileName, strFoundMsg As String
Dim objFSO, objFile As Object

Set objFSO = CreateObject("Scripting.FileSystemObject")

strDirectory = "C:"
strFileName = "intra_financiamento_imobiliario.xls"

    For Each objFile In objFSO.getfolder(strDirectory).Files
    
        If objFile.Name Like strFileName Then
                      strFoundMsg = "Encontrado " & strFileName & " em " & strDirectory
            MsgBox strFoundMsg, vbInformation, "Procurar Arquivo"
            Exit Sub
        End If
    
    Next
   
    strFoundMsg = "Não encontrado " & strFileName & " em " & strDirectory
    MsgBox strFoundMsg, vbExclamation, "Procurar Arquivo"

End Sub

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 24/03/2014 2:39 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Alexandre,
Obrigado pela atenção.

Mas eu preciso que a função procure o arquivo e, quando localizado, importe os dados
da planilha Relatorio.

Grato.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 24/03/2014 3:27 pm
(@edcronos)
Posts: 1006
Noble Member
 

:?: Desculpa não sei nada sobre importação de um arquivo para outro.

Mas para importar de uma para outra não é necessário saber oq vai ser importado e o local dentro da planilha de e para onde? :?:
e sendo assim não é necessário saber a estrutura dos 2 arquivos ????

??????

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 24/03/2014 3:36 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Edcronos,
No caso acima, sei o que vai ser importado: A Plan Relatorio, da pasta intra_financiamento_imobiliario.xls.
Preciso saber é: onde a pasta (arquivo) intra_financiamento_imobiliario.xls está (na área de trabalho, em arquivos recebidos, ou em downloads, etc) e, quando localizá-lo, fazer a importação.
Grato,
Pedro

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 24/03/2014 5:38 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Edcronos,
No caso acima, sei o que vai ser importado: A Plan Relatorio, da pasta intra_financiamento_imobiliario.xls.
Preciso saber é: onde a pasta (arquivo) intra_financiamento_imobiliario.xls está (na área de trabalho, em arquivos recebidos, ou em downloads, etc) e, quando localizá-lo, fazer a importação.
Grato,
Pedro

Pedro, se analisar direito o que o colega Edcronos postou verá que o questionamento dele não é em vão, pois podemos simplesmente importar(copiar/colar) planilhas inteiras ou determinado dados conforme algum criterio, e para isto seria necessário mais detalhes.
Mas levando em conta a sua resposta, estou supondo que irá importar a aba inteira sem nenhum criterio, então acredito que a rotina abaixo resolva a questão, é só ajustar onde contem a linha com o diretorio e nome do arquivo com o resultado da rotina de pesquisa que o alexandre colocou.
Uma observação, o ideal seria que se soubesse pelo menos uma pasta inicial onde possa estar o arquivo, digo isto por já ter tido problemas nesta questão, explicando melhor, ão sei qual SO está utilizando, mas a maioria dos SO armazena em uma pasta "Recent" os arquivos abertos recentementes, e se o arquivo que for procurar já tinha sido aberto antes a rotina encontrara dois arquivos com o mesmo nome, um na pasta original e outro na pasta recent files.

Veja se consegue adaptar:

Sub ImportarDados()
    Dim DestCell As Range
    
    'Ajustar conforme a localização efetuada na rotina de localizar o arquivo
    Workbooks.Open Filename:="C:Documents and SettingsCoutinhoMeus documentosintra_financiamento_imobiliario.xls"
     
    
    Dim Origem As Worksheet
    Dim Destino As Worksheet
    
    Set Origem = Workbooks("intra_financiamento_imobiliario.xls").Worksheets("Relatorio")
    
    'Nome do Arquivo e Aba que receberá os Dados
    Set Destino = Workbooks("NomeDoArquivoQueIraRecebrAImportação.xls").Worksheets("Plan1")
    
    'Copia os dados
    Origem.Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)).Copy
    
    Destino.Activate
    
    'Define a Celula que ira receber os dados
    Set DestCell = Range("A1")
    
    'Cola osDados copiados
    DestCell.PasteSpecial Paste:=xlValues
    Application.CutCopyMode = False
  
       
    Workbooks("intra_financiamento_imobiliario.xls").Close SaveChanges:=False
    MsgBox "Introdução de Dados Concluída"
    
End Sub

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 24/03/2014 9:40 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro,
A função Abre o arquivo, mas Dá o erro em tempo de execução 9: subscrito fora do intervalo.
Aproveito para te perguntar se não é possível procurar o arquivo em na HD (ou em C:).
Grato,
Pedro

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 25/03/2014 3:56 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pedro,
A função Abre o arquivo, mas Dá o erro em tempo de execução 9: subscrito fora do intervalo,
Como não expecificou em qual linha se deu o erro e se o arquivo abriu então o erro deve ser o nome das abas que devem estar diferente ou na planilha Origem ou Destino, verifique se estão corretos.

Quanto a segunda questão, adaptando as rotinas postada no link abaixo:
vba code in access 2007 to search for files in subdirectories
http://social.msdn.microsoft.com/Forums ... irectories
apesar de dizer access pode ser utilizada no Excel sem problemas, temos o seguinte, coloque em um modulo e ajuste o nome do arquivo a procurar:

Option Explicit

Public file_loc As String
Public Caminho_Completo As String

Sub findfile()
    Dim FSO
    Dim FOLDER
    Dim strFolder As String
    
    'set MyFilename and strfold as required
    'file to search for
    
    'Coloque aqui o Nome do Arquivo que quer procurar
    Const MyFileName = "NomeDoArquivoA_Procurar.xls"
    'Diretorio que iniciará a pesquisa - strFolder
    strFolder = "c:"
    file_loc = ""
   
   Set FSO = CreateObject("Scripting.FileSystemObject")
   Set FOLDER = FSO.GetFolder(strFolder)
   
   Call GetWorksheetsSubFolder(strFolder + "", MyFileName)
   
   'MsgBox ("File found in folder: " & file_loc) 'Exibe somente o nome da pasta
   MsgBox ("Arquivo localizado em: " & Caminho_Completo) 'Exibe o Caminho completo
   
End Sub

Sub GetWorksheetsSubFolder(strFolder, MyFileName)
    Dim FSO
    Dim FOLDER
    Dim sf, fl
   
   Set FSO = CreateObject("Scripting.FileSystemObject")
   Set FOLDER = FSO.GetFolder(strFolder)
   
      If FOLDER.subfolders.Count > 0 Then
         For Each sf In FOLDER.subfolders
            On Error GoTo 100
            Call GetWorksheetsSubFolder(strFolder + sf.Name + "", MyFileName)
            If file_loc <> "" Then Exit For
100      Next sf
      End If
   
   'folder size in bytes
   On Error GoTo 200
      If file_loc = "" Then
         For Each fl In FOLDER.Files
            If fl.Name = MyFileName Then
               file_loc = FOLDER.Name
               Caminho_Completo = strFolder
            End If
         Next fl
       End If
       
200   On Error GoTo 0

End Sub

Ressaltando o que eu disse antes, o ideal seria forçar os usuários a salvar o arquivo em uma só pasta, isto poderia ser atraves de um rotina.
Em sua pergunta :"Precisa ser o relatório mais atual, e o usuário não sabe em qual Diretório o arquivo se encontra." vejo duas questões a considerar que não sei se entendi corretamente:
Primeira: Precisa ser o relatório mais atual
Segunda: o usuário não sabe em qual Diretório o arquivo se encontra

Ou seja, se o usuário salvar o arquivo pela primeira vez em "C" e um segundo usuário salvar em "CMeusDocumentos", a rotina sairá do loop ao encontrar a primeira coincidencia, obedecendo a Árvore(Dirretorio) e não irá verificar qual dos dois foi salvo por último, então, poderemos não ter o mais atual.

Outra obs quanto a este tipo de pesquisa que quer realizar, ao solicitar para pesquisar em todas as Pastas de "C:", dependendo da quantidade de Pastas e SubPastas que tiver, com certreza o tempo de (processamento) procurá será bem grande e consequentemente o tempo de espera pelo resultado, o lado bom é que da para ir tomar um cafezinho até terminar, rsrsr

Faça os testes e qq duvida retorne.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 25/03/2014 5:31 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro,
Aprecio a didática. Além de ajudar, você ensina.
Tanto que vou forçar a utilização de determinada Pasta.
Muito Obrigado.

Mas, Ao testar deu erro de execução 70 na linha: If FOLDER.subfolders.Count > 0 Then
Se puder verificar......

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/03/2014 10:01 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

pedro, de fato temos um erro, ontem quando executei em meu PC correu tudo bem, sem erro, e resolvi fazer um teste aqui na empresa e deu o erro 70 Acesso Negado, e ao Depurar vi que o erro é pelo fato que neste PC da empresa, no diretorio Raiz tem algumas pastas com acesso negado definido pelo Suporte.
Para ver em seu caso se é a mesma coisa, faça o seguinte:
Execute a Rotina e quando aparecer a mensagem com o erro não clique em Fim e sim, clique em Depurar e irá aparecer a seguinte linha em amarelo - If FOLDER.subfolders.Count > 0 Then
Então posicione o cursor do mouse em cima da Variável "strFolder" que se encontra na linha logo acima Set FOLDER = FSO.GetFolder(strFolder) e será exibido a pasta que em se deu o erro e que provavelmente está Bloqueada para acesso, veja a imagem:

Assim que tiver uma folga aqui, vejo se tem como pular estas restrições.
[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/03/2014 10:40 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro,
Grato pela atenção,
A pasta de strFolder é: c:documents and Settings
Ocorre que uso o meu notebook.
Como desbloquear?

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/03/2014 4:00 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Preciso Importar a planilha Relatorio na HD, do arquivo com o nome intra_financiamento_imobiliario.xls.
Precisa ser o relatório mais atual, e o usuário não sabe em qual Diretório o arquivo se encontra.
Como fazer em VBA?
Grato,
Pedro

Pessoal,
Como o caminho e o nome do arquivo podem variar, Vou colocar na Célula B1 o caminho e em B2 o nome do arquivo XLS, na Plan5, como no exemplo abaixo:
Na Plan5 (Destino)
B1 = "C:UsersPEDRO_DELLDownloads"
B2 = "intra_financiamento_imobiliario"

Preciso de função para importar a planilha Relatorio, do arquivo que está no caminho Plan5!B1 cujo nome está na Plan5!B2.

Conto com sua ajuda,
Pedro

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 05/04/2014 1:25 pm