Excel / VBA - Informatie ophalen uit een gesloten werkmap
[Excel-VBA] Lees een gesloten werkboek in
Er zijn verschillende methoden onder VBA om gegevens uit een Excel-werkmap te lezen, zonder deze later te openen. De meeste van deze methoden staan bekend om hun complexiteit, maar er is een kleine truc om dit te omzeilen, zonder de OLE DB-verbinding te gebruiken (alleen-lezen modus).Invoering
We zullen proberen om informatie op te halen in onze "Recap" werkmap. De informatie bevindt zich in het volgende cellenbereik "A1: F10" van "Sheet1" van de "bron" -werkmap, in de map "C: \ Pijaku \ Ne_fait_rien_de_ses_journées \ CCM \"
- Open eerst de werkmap en voer "Pijaku" in Blad1 in, van cel A1 tot cel F10 en sla deze op als "source.xls" in de "C: \ Pijaku \ Ne_fait_rien_de_ses_journées \ CCM \"
- Laten we deze werkmap sluiten.
- Open een tweede werkmap en sla deze op als " Recap.xls " (op de desktop).
De methode van Excel:
In uw Recap.xls-werkmap:
Voeg een gedefinieerde naam in.
- Menu: invoegen
- Keuze: naam
- Klik op: Instellen
- Namen in werkmap => type: bereik
- Verwijst naar => Enter = 'C: \ Pijaku \ Ne_fait_rien_de_ses_journées \ CCM \ [source.xls] Feuil1'! $ A $ 1: $ F $ 10
- Klik op Toevoegen.
- Voer in uw werkmap de formule in A1: = bereik in
- en valideer.
- Strek deze formule uit van A1 tot F10 ...
VBA-code
Sub ImporterDonneesSansOuvrir ()Dim Chemin As String, Fichier As 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"
Met bladen ("Feuil2")
. [A1: F10] = "= plage"
. [A1: F10] .Copy
Spreadsheets ("Feuil1"). Bereik ("A1"). PlakkenSpeciale xlPasteValues
. [A1: F10] .Duidelijk
Eindigt met
End Sub
Let daar op
Zorg er vooral voor dat het pad naar de map, de spelling corrent is. Controleer ook of "\" aanwezig is tussen het mappad en de naam van de werkmap.
Voorbeeld van gebruik
Deze code doorloopt alle werkmappen in een map en extraheer de inhoud van cel A1 (blad1), in dit geval bijvoorbeeld een datum.
Optie ExplicietSub ImporterDates ()
Dim objShell als object, objFolder als object
Dim Chemin As String, fichier As String
Stel objShell = CreateObject ("Shell.Application") in
Stel objFolder = objShell.BrowseForFolder (& H0 &, "Choisir un répertoire", & H1 &)
Als objFolder dan niets is
MsgBox "Abandon opérateur", vbCritical, "Annulation"
Anders
Kolommen (1) .NumberFormat = "m / d / jjjj"
Chemin = objFolder.ParentFolder.ParseName (objFolder.Title) .Path & "\"
[B1] = Chemin
fichier = Dir (Chemin & "* .xls")
Do While Len (fichier)> 0
Als dit echter ThisWorkbook.Name fichier
ThisWorkbook.Names.Add "Plage", _
RefersTo: = "= '" & Chemin & "[" & fichier & "] Feuil1'! $ A $ 1"
Met bladen ("Feuil2")
. [A1] = "= Plage"
. [A1] .Copy
Spreadsheets ("Feuil1"). Bereik ("A" & Rows.Count). End (xlUp) .Offset (1, 0) .PasteSpecial xlPasteValues
Sheets ("Feuil1"). Range ("A" & Rows.Count). End (xlUp). Offset (0, 1) = fichier
Eindigt met
Stop als
fichier = Dir ()
Lus
Stop als
End Sub
downloads
Je kunt de:
- bron werkboek
- samenvatting werkmap
- Ook beschikbaar om een Zip-bestand te downloaden om de loop te demonstreren.