Avatar billede hoejlund Nybegynder
20. april 2004 - 08:42 Der er 7 kommentarer og
1 løsning

Automatisere import af data fra stort antal excel-ark?

Hjælp: Jeg har et bibliotek med et stort antal excel ark (>150 stk) med data i en bestemt fane (f.eks. Halm!a12:g19)som jeg gerne vil importere til Access (eller SAS) på en let måde. Data er struktureret ens i alle ark. Hvert ark har unikt navn (gård, periode; f.eks "Bakkegården IS 300402.xls") som gerne skulle knyttes til de importerede data som en variabel så man kan se forskel på data fra de forskellige gårde og perioder.

Er der nogen som kan hjælpe med en automatiseret løsning??
Avatar billede hnteknik Novice
20. april 2004 - 10:24 #1
Jep - I access opretter du en tabel, som kan rumme dine fildata og en tabel som kan
rumme dine excel data.

Et eks. på hvordan man høvler 1000 arkreferencer ind i en tabel:
Sub test2()
Dim strfilepath As String
    strfilepath = xReturnFilePath("*.xls", "X:\testsager\YYY", True, "")
    MsgBox strfilepath
End Sub
---
Function xReturnFilePath(strFilename As String, _
    strDrive As String, _
    blnSearchSubDir As Boolean, _
    strFindThisText As String) As String
   
   
  Dim db As Database: Set db = CurrentDb()
  Dim FilnavnRS As Recordset, MyPos As Integer
 
  Dim varFile As Variant, strFileList As String, SearchChar As String, SearchString As String
  'åben tabellen til at modtage filnavne:
  '
    Set FilnavnRS = db.OpenRecordset("tblfilnavn", DB_OPEN_TABLE)
    strFileList = "Data er tilført tabellen tblfilnavn"
    SearchChar = "kal"
   
With Application.FileSearch
  .NewSearch
  .FileName = strFilename
  .LookIn = strDrive
  .SearchSubFolders = blnSearchSubDir
  '.TextOrProperty = "San*" 'find tekst i doc
  '.PropertyTests.Add "Contents", msoConditionIncludes, strFindThisText
  If .Execute(msoSortByFileName, msoSortOrderAscending, True) > 0 Then
      For Each varFile In .FoundFiles
        SearchString = CStr(varFile)
        MyPos = InStr(1, SearchString, SearchChar, 1)
        If MyPos > 0 Then
            ' Create a new record
            FilnavnRS.AddNew
           
            FilnavnRS(0) = varFile
            'FilnavnRS(1) = varFile.Path
            'FilnavnRS(2) = varFile.Name
            'FilnavnRS(3) = varFile.DateLastModified
            ' Save the new record
            FilnavnRS.Update
            'cboFoundCombo.AddItem varFile
        End If
      Next varFile
  Else
      'cboFoundCombo.AddItem "No Matching Files Located!"
      strFileList = "Vi fandt ikke noget der passede!"
  End If
  'cboFoundCombo.ListIndex = 0
     
End With
    FilnavnRS.Close
xReturnFilePath = strFileList
End Function
---

et ex. på hvordan du henter data fra excell regnearket:

Private Sub Hentdata_Click()
Dim A As String, filnavn As String
Dim xApp As Object
    filnavn = "X:\bytx\YYY.xls"
   
  Set xApp = CreateObject("Excel.Application")
    xApp.Workbooks.Open FileName:=filnavn
    xApp.Sheets("TESTARKNAVNETHER").Select
    'xApp.Visible = True
    xApp.Visible = False
    xApp.AskToUpdateLinks = True
    Me.filnavn = filnavn
    Me.BASISKODE = xApp.range("C8").Value
    Me.C1 = xApp.range("L44").Value
    Me.C2 = xApp.range("L56").Value
    Me.C3 = xApp.range("L69").Value
    Me.C4 = xApp.range("L75").Value
    Me.C5 = xApp.range("L103").Value
    Me.C6 = xApp.range("L132").Value
    Me.Totalpoints = xApp.range("H24").Value
    Me.Rate_Bygning = xApp.range("h32").Value
    Me.Rate_Driftstab = xApp.range("H30").Value
    Me.Rate_løsøre = xApp.range("H27").Value
    Me.RSnr = Nz(xApp.range("M4").Value, "Ubekendt RSnr")
    Me.RISKnavn = Nz(xApp.range("A2").Value, "Ubekendt Navn")
    Me.RISKAdr = Nz(xApp.range("A3").Value, "Ubekendt Adr")
    Me.Tarifdato = Nz(xApp.range("L2").Value, "Ubekendt Dato")
    Me.tarifVersion = Nz(xApp.range("F1").Value, "Ubekendt Tarifversion")
    xApp.ActiveWorkbook.Close savechanges:=False
End Sub
--
Der mangler blot at lave en rutine, der med et loop henter arkreferencen i filtabellen og levererer til dataudtræksrutinen, som selvfølgelig kan gemme filnavnen i din datatabel.

Håber det giver lidt inspiration.

Henrik
Avatar billede hnteknik Novice
20. april 2004 - 10:28 #2
Jeg har ikke rodet med koden i et stykke tid. Dengang havde jeg et problem med at få den til at tie, hvis der er macroer bagved og om den skulle opdatere eksterne referencer. Det hele skulle gerne køre af sig selv. Det lykekdes mig at hente data fra 1300 ark over et net indenfor 2-3 kvarters tid.

Henrik
Avatar billede hoejlund Nybegynder
20. april 2004 - 11:22 #3
Tak for inspiration....det ser jo ud til at være noget af det rigtige. Men det funker ikke helt...for mig

ved første "Dim db As Database:" siger den " Compile error: User-defined type not defined".....og nu er jeg jo ikke lige ekspert...mangler der en "Type...End Type" for Database?
Avatar billede hnteknik Novice
20. april 2004 - 11:35 #4
Ups du skal sikkert sætte en reference til Office objectet
'skal minimum bruge office 7 object modulet
Avatar billede hnteknik Novice
20. april 2004 - 11:40 #5
Application.FileSearch ligger i Office objectet
Avatar billede hnteknik Novice
27. april 2004 - 08:54 #6
?
Avatar billede hoejlund Nybegynder
27. april 2004 - 09:03 #7
Sikkert ok svar - mine kundskaber rakte ikke helt til at omsætte det...i mellemtiden er en anden løsning kommet i sigte.

Tak for indsatsen.

Mvh Anders
Avatar billede hnteknik Novice
27. april 2004 - 09:12 #8
Det var synd, Anders. Du skulle bare sætte et tick i references for Office dll filen. Løbe rækken af referencer igennem og finde en af versionerne office 7-10. referencen hedder 'Microsoft Office 10 object library' og ligger i shared mappen under MSO.dll
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