Avatar billede stieper Nybegynder
30. april 2007 - 14:55 Der er 16 kommentarer

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?

Kom gerne med eksempler - også i VB.

På forhånd tak for hjælpen
Avatar billede hnteknik Novice
30. april 2007 - 14:59 #1
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
Avatar billede stieper Nybegynder
30. april 2007 - 15:02 #2
Super - glæder mig...

Sidder fast lige nu :-(
Avatar billede hnteknik Novice
30. april 2007 - 15:05 #3
Prøv med denne her:

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
Avatar billede hnteknik Novice
30. april 2007 - 15:10 #4
Jeg har en tabelstruktur som ser sådan ud:


filnavn
medtag
FDato
filsize
Avatar billede stieper Nybegynder
30. april 2007 - 15:12 #5
@hnteknik:

Jeg er helt noob når det gælder vb.

Hvor sætter jeg det ind hende, og hvad skal jeg ændre i koden, hvis vi antager at min tabel i access hedder "Tabel" ?
Avatar billede hnteknik Novice
30. april 2007 - 15:12 #6
kalde streng

FileSearch_MDB "g:\kundesager\", True, "*.XLS", "C:\erfabase.mdb", "tblfilnavn", "filnavn"
Avatar billede stieper Nybegynder
30. april 2007 - 15:18 #7
Ok - så er jeg med så langt.

Når jeg står i tabeloversigten, har jeg trykket på Funktioner->Makro->Visual Basic Editor

Hvad gør jeg herfra?
Avatar billede hnteknik Novice
30. april 2007 - 15:19 #8
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
Avatar billede stieper Nybegynder
30. april 2007 - 15:22 #9
Hov.. ikke så hurtigt...

Jeg mangler at kunne indsætte første kode i et objekt, og så kunne kalde koden.

Jeg ved ikke hvor jeg skal indsætte koden, og jeg ved ikke hvordan jeg kalder koden (hvor jeg indtaster kalde-strengen)
Avatar billede hnteknik Novice
30. april 2007 - 15:24 #10
Jeg er ikke helt med.

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.
Avatar billede hnteknik Novice
30. april 2007 - 15:27 #11
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.
Avatar billede stieper Nybegynder
30. april 2007 - 15:54 #12
Mangler bare at finde ud af hvordan jeg eksekverer koden!!

Jeg har sat den ind i et modul under min tabel - men kan ikke finde ud af hvordan jeg kører kommandoen:

FileSearch_MDB "g:\kundesager\", True, "*.XLS", "C:\erfabase.mdb", "tblfilnavn", "filnavn"
Avatar billede hnteknik Novice
01. maj 2007 - 18:14 #13
Du skal huske at rette mine tekster til, så de passer til din situation.

Du sætter det blot ind i en sub og klikker på ? F5 for at eksekvere eller kalder subben fra en knap på en nuoprettet form.

Jeg er på kundebesøg de næste dage, så jeg håber, at det sætter dig igang.
Avatar billede stieper Nybegynder
02. maj 2007 - 13:03 #14
Jeg fandt en anden løsning:

1. Jeg oprettede en makro med funktionen "transferspreadsheet" og konverterede den til en VB funktion.

2. Jeg lavede en sub som itererer gennem alle filer i en mappe + undermapper og udfører funktion 1 herpå.

Jeg poster lige koden, når jeg kommer på arbejde i morgen.
Avatar billede stieper Nybegynder
05. maj 2007 - 21:35 #15
Jeg brugte følgende:

Function Excel_Import_File(fil As String)

On Error GoTo Excel_Import_File_Err
   
    ' Import af data
    DoCmd.TransferSpreadsheet acImport, 8, "TEST_TABEL", fil, True, "DATA!B1:J17"

Excel_Import_File_Exit:
    Exit Function

Excel_Import_File_Err:
    MsgBox Error$
    Resume Excel_Import_File_Exit

End Function

Sub Import_Dir_Excel(ByVal StartDir As String)

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

Wend
End Sub
Avatar billede hnteknik Novice
06. maj 2007 - 14:29 #16
Princippet er det samme, så hvis du fik det til at virke, er det jo godt.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester