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