Importere mange xls filer til samme tabel i access?
Hej eksperter,
Jeg er ved at importere data fra omkring 2.000 excel regneark (alle med identisk opbygning) til en access tabel.
Jeg har lavet en makro med "OverførRegneark" - metoden, men kan kun få den til at importere 1 fil af gangen - hvor jeg skal indtaste fil-navnet hver gang.
Findes der en metode, hvor jeg kan importere alle filer i en bestemt mappe, eller på anden måde kan importere mange filer på een gang?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jeg lavede vist noget engang hvor jeg traverserede et hierakisk mappesystem og gemte xls filerne i en tabel - og så derefter ... som dig. Jeg kigger lige i bunken
Sub FileSearch_MDB(soegmappe As String, soegsubs As Boolean, strextend As String, dropdbfilnavn As String, droptable As String, dropfield As String) ' Set Microsoft Office 9.0 Object Library before Executing this Sub Dim intI As Integer Dim cn As ADODB.Connection, rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _ "Data Source=" & dropdbfilnavn & ";" ' Åben et recordset Set rs = New ADODB.Recordset rs.Open droptable, cn, adOpenKeyset, adLockOptimistic, adCmdTable ' alle records i en tabel With Application.FileSearch .NewSearch .LookIn = soegmappe .SearchSubFolders = soegsubs .FileName = strextend .MatchTextExactly = True .FileType = msoFileTypeAllFiles
End With
With Application.FileSearch If .Execute() > 0 Then MsgBox "Der blev fundet " & .FoundFiles.Count & " fil(er)."
For intI = 1 To .FoundFiles.Count rs.AddNew ' tilføj ny record rs.Fields(dropfield) = .FoundFiles(intI) rs.Fields("filsize") = FileLen(.FoundFiles(intI)) / (1024 ^ 2) rs.Update ' gen den nye record Next intI Else MsgBox "Der blev ikke fundet nogen filer." End If End With rs.Close ' luk skidtet Set rs = Nothing cn.Close ' også her Set cn = Nothing ' slut prut finale End Sub
En funktion til at flytte data fra filer i tabellen til en resultatfil var: (Selve dataflytningen foregik i Movedata - form sekumdikken var blot for at kunne følge processen)
Sub hentdatafrafilnavn() Dim db As DAO.Database Dim RsFil As DAO.Recordset ' Set db = CurrentDb Set RsFil = db.OpenRecordset("tblfilnavn", dbOpenDynaset) If Not (Err = 0) Then RsFil.Close Exit Sub End If Forms![inddata]![lblfilnavn].Caption = "" Forms![inddata].Refresh While Not RsFil.EOF 'MsgBox Rsfil.Fields(0) Forms![inddata]![lblfilnavn].Caption = RsFil.Fields(0) Forms![inddata].Refresh Movedata RsFil.Fields(0), "Tblaktiv"
RsFil.MoveNext Wend
Forms![inddata]![lblfilnavn].Caption = "Dataindsamlingen er Nu Slut" Forms![inddata].Refresh RsFil.Close ' luk skidtet Set RsFil = Nothing db.Close ' også her Set db = Nothing ' slut prut finale End Sub
Du skal oprette en tabel til at modtage filnavne og
have en funktion/rutine, der kan behandle data udfra filnavnet og placere det i en kendt tabel. Det må du kunne se ud fra den vba, der er dannet i makroen.
Jeg har ikke rodet med makroer i 8 år, men gætter på, at Access i dag smider makrokoden som vba kode et eller andet sted. Den kode skal rettes til så den kan modtage de to parametre.
Du opretter et modul i vba editoren og sætter opvennævnte kodestumper ind. Den sidste er kaldt fra en form, så du skal slette Forms![inddata]![lblfilnavn].Caption = "" Forms![inddata].Refresh
da det hører til min form.
Jeg må løbe nu, da jeg har et kundemøde i morgen, jeg skal forberede mig til.
Dim s As String Dim currdir As String Dim dirlist As New Collection
If Right$(StartDir, 1) <> "\" Then StartDir = StartDir & "\" dirlist.Add StartDir While dirlist.Count 'Fjern dir fra nuværende liste currdir = dirlist.Item(1) dirlist.Remove 1 'find alle filer og subdirectories in nuværende, add til liste s = Dir$(currdir, vbDirectory) While Len(s) If (s <> ".") And (s <> "..") Then 'fjern "." og ".." If GetAttr(currdir & s) = vbDirectory Then 'tilføj subdirectory'et dirlist.Add currdir & s & "\" Else Excel_Import_File (currdir & s) End If End If s = Dir$ Wend
Princippet er det samme, så hvis du fik det til at virke, er det jo godt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.