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?
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.