Excel / VBA - Recuperar informações de uma pasta de trabalho próxima
[Excel-VBA] Leia em uma pasta de trabalho fechada
Existem vários métodos no VBA, para ler dados de uma pasta de trabalho do Excel, sem abrir o último. A maioria desses métodos é conhecida por sua complexidade, mas, no entanto, há um pequeno truque para contornar isso, sem usar a conexão OLE DB (modo somente leitura).Introdução
Vamos tentar recuperar as informações para a nossa apostila "Recapitular". As informações estão localizadas no seguinte intervalo de células "A1: F10" de "Sheet1" da pasta de trabalho "fonte", localizada no diretório "C: \ Pijaku \ Ne_fait_rien_de_ses_journées \ CCM \"
- Primeiro, abra a pasta de trabalho e insira "Pijaku" na Planilha1, da célula A1 à célula F10 e salve-a como "source.xls" em "C: \ Pijaku \ Ne_fait_rien_de_ses_journées \ CCM \"
- Vamos fechar este livro.
- Abra uma segunda pasta de trabalho e salve-a como " Recap.xls " (na área de trabalho).
O método pelo Excel:
Na sua pasta de trabalho Recap.xls:
Insira um nome definido.
- Menu: Inserir
- Escolha: nome
- Clique em: Set
- Nomes na pasta de trabalho => type: range
- Refere-se a => Enter = 'C: \ Pijaku \ Ne_fait_rien_de_ses_journées \ CCM \ [source.xls] Feuil1'! $ A $ 1: $ F $ 10
- Clique em Adicionar.
- Em sua pasta de trabalho, insira a fórmula em A1: = range
- e validar.
- Estique esta fórmula de A1 a F10 ...
Código VBA
Sub ImportadorDonneesSansOuvrir ()Dim Chemin como String, Fichier como String
Chemin = "C: \ Pijaku \ Ne_fait_rien_de_ses_journées \ CCM \"
Fichier = "source.xls"
ThisWorkbook.Names.Add "plage", _
RefersTo: = "= '" & Chemin & "[" & Fichier & "] Feuil1'! $ A $ 1: $ F $ 10"
Com folhas ("Feuil2")
[A1: F10] = "= plage"
[A1: F10] .Copy
Sheets ("Feuil1"). Range ("A1"). PasteSpecial xlPasteValues
[A1: F10] .Claro
Fim com
End Sub
Observe que
Acima de tudo, verifique se o caminho para o diretório, a ortografia é corrent. Além disso, verifique se "\" está presente entre o caminho do diretório e o nome da pasta de trabalho.
Exemplo de uso
Esse código percorre todas as pastas de trabalho em um diretório e extrai o conteúdo da célula A1 (sheet1), nesse caso, por exemplo, uma data.
Option ExplicitSub ImporterDates ()
Dim objShell As Object, objFolder As Object
Dim Chemin As String, fichier As String
Definir objShell = CreateObject ("Shell.Application")
Defina objFolder = objShell.BrowseForFolder (& H0 &, "Choisir un répertoire", & H1 &)
Se objFolder não é nada, então
MsgBox "Abandon opérateur", vbCritical, "Annulation"
Outro
Colunas (1) .NumberFormat = "m / d / aaaa"
Chemin = objFolder.ParentFolder.ParseName (objFolder.Title) .Path & "\"
[B1] = Chemin
fichier = Dir (Chemin & "* .xls")
Do While Len (fichier)> 0
Se fichier ThisWorkbook.Name então
ThisWorkbook.Names.Add "Plage", _
RefersTo: = "= '" & Chemin & "[" & fichier & "] Feuil1'! $ A $ 1"
Com folhas ("Feuil2")
[A1] = "= Plage"
[A1] .Copy
Sheets ("Feuil1"). Range ("A" e Rows.Count) .End (xlUp) .Offset (1, 0) .PasteSpecial xlPasteValues
Folhas ("Feuil1"). Range ("A" & Rows.Count) .End (xlUp) .Offset (0, 1) = fichier
Fim com
Fim se
fichier = Dir ()
Loop
Fim se
End Sub
Transferências
Você pode baixar o:
- pasta de trabalho de origem
- recapitular livro
- Também está disponível para download um arquivo Zip demonstrando o loop.