20. april 2004 - 08:42Der 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??
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.
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.
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?
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
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.