Avatar billede palleren Novice
12. august 2013 - 15:27 Der er 11 kommentarer og
1 løsning

Konsolidering af dokumenter med både tekst og tal

Hej

Jeg har en opgave hvor jeg har 9 dokumenter, hvor der løbende indføres nogle data i, og disse 9 forskellige dokumenter ønsker at samle i 1 dokument, der løbende opdateres via kæder, så ledes at det ene dokument hele tiden er up to date..

Nogle af felterne er tal, nogle dato og andre er tekst.

De har alle samme overskrifter på kollonerne.


Jeg har prøvet med Konsolider, men så trækker arkene kun tal over.

Hvordan kan jeg løse dette problem?

Håber der er nogen som kan hjælpe mig.
Avatar billede supertekst Ekspert
12. august 2013 - 23:35 #1
Måske via VBA
Avatar billede palleren Novice
13. august 2013 - 08:18 #2
Jeg har tænkt på om VBA var en mulig løsning, men ville helst hvis der var andre muligheder, eftersom mine VBA evner ikke er super... :S
Avatar billede supertekst Ekspert
13. august 2013 - 09:17 #3
Det kan du da i givet fald få hjælp til..
Avatar billede palleren Novice
13. august 2013 - 11:39 #4
Al hjælp vil blive værdsat!
Avatar billede KurtOA Praktikant
19. august 2013 - 10:38 #5
Hvis du vil ha hjælp til en VBAløsning - så er du nok nødt til give lidt flere oplysninger om hvad det er for en opgave du skal have løst  ;-)
Avatar billede palleren Novice
19. august 2013 - 14:44 #6
Jamen jeg er interesseret i en løsning som bare funker:)!

I så fald VBA er løsningen, hvilke oplysninger efterspørges?
Avatar billede palleren Novice
19. august 2013 - 15:09 #7
Prøver at forklare det grundigere så.

1. Jeg har 9 dokumenter i formatet xlsx-> HVK, SVM, KAS, SLA, VOR, JPL, SJO, JON, BNH

2. Hvert dokument registrerer noget forskellige "aftaler" på et ark hver, lad os kalde dem --> A, B og C

3. I disse dokumenter registreres en dato, en observation(i tekst), og der sættes et tal i en ud af 3 koloner, afhængigt af udfaldet(Klage, afvist, udbedret).

4. Jeg ønsker så nu at have ET samlet dokument hvor jeg trækker de 9 sammen. Dvs...alle arkene fra hvert af de 9 konsolideres i et Excel dokument jeg opretter til formålet. Dette Excel dokument skal have ark A B og C...hvor de andre 9 så er samlet

5. Næste gang jeg åbner mit "master dokument" skal den konsolidere dokumenterne igen på ny, således at master dokumentet hele tiden er opdateret...

Håber det gav lidt mere mening :)?
Avatar billede KurtOA Praktikant
19. august 2013 - 15:14 #8
Er de 9 dokumenter ens i opbygningen?

Dvs overskrifter, datakolonner osv...?
Bruger du evt navngivning af områder i de 9 filer?

mvh Kurt
Avatar billede palleren Novice
19. august 2013 - 15:25 #9
De 9 dokumenter er ens i opbygning, altså A i HVK er lig med A i alle de andre. Eneste forskel er antallet af registreringer, altså antal linier.

Der er ikke brugt navngivning af områder :S
Avatar billede KurtOA Praktikant
19. august 2013 - 15:34 #10
Ok - kigger på det og giver et forslag senere ;-)

Det kan sagtens laves i vba således at "hovedfilen" åbner de 9 dokumenter, et for et, indlæser dine data, og lukker disse filer igen.

Kan du sende mig et eksempel på bare en af filerne? Gerne uden data?

kurt snabelA vindu punktum dk

mvh Kurt
Avatar billede palleren Novice
19. august 2013 - 15:55 #11
Hej Kurt

Jeg emailer dig et eksempel nu her :)!

Med venlig hilsen
Palle
Avatar billede KurtOA Praktikant
22. august 2013 - 15:23 #12
Denne løste opgaven ;-) 

Sub indlæsData()

Application.ScreenUpdating = False

Dim wbSource As Workbook, wbTarget As Workbook
Dim wsSource As Worksheet, wsTarget As Worksheet
Dim curPath As String
curPath = ThisWorkbook.Path & "\"

Dim tmpFile As String
Dim lastRow As Long, lastcol As Long, curRow As Long
Dim arrayFiles As Variant, arraySheets As Variant, arrSize As Long
Dim C As Long, countLines As Long
Dim S As Long, F As Long, R As Long

Set wbTarget = ActiveWorkbook

If Not wbTarget.Name = "overblik.xlsm" Then
MsgBox "Makro køres fra forkert fil - luk denne fil og åbn den rigtige ;-) "
Exit Sub
End If

' Danner liste over hvilke filer der skal behandles
        Sheets("Admin").Select
        lastRow = Range("A65536").End(xlUp).Row
        arrSize = lastRow - 1
        ReDim arrayFiles(arrSize)
       
        ' behandler filer 1 for 1
        For C = 1 To arrSize
        arrayFiles(C) = Cells(1 + C, 1)
        Next C
       
' Danner liste over hvilke faner der skal behandles
        Sheets("Admin").Select
        lastRow = Range("C65536").End(xlUp).Row
        arrSize = lastRow - 1
        ReDim arraySheets(arrSize)
       
        ' behandler filer 1 for 1
        For C = 1 To arrSize
        arraySheets(C) = Cells(1 + C, 3)
        Next C
       
' Checker om filer på listen finds i mappen
       
For F = 1 To UBound(arrayFiles)
tmpFile = arrayFiles(F)
        If Not Dir(curPath & tmpFile) > "" Then
        MsgBox "Kan ikke finde filen: " & tmpFile & "?", vbCritical
        Exit Sub
        End If
Next F
       
' Slettes gamle data på arkene i konsolideringsfilen

        For S = 1 To UBound(arraySheets)
        Dim wsSlet As Worksheet
        Set wsSlet = wbTarget.Worksheets(arraySheets(S))
        wsSlet.Activate
        Range("A3:P50000").ClearContents
        Next S
     
' ### Gør klar til at åbne filer i listen herover, 1 for  1
For F = 1 To UBound(arrayFiles)
tmpFile = curPath & arrayFiles(F)

Set wbSource = Workbooks.Open(Filename:=tmpFile, ReadOnly:=True) ' kildefilen er nu åben

' ### Nu skal de data-ark i filen læses og data skal indlæses
        For S = 1 To UBound(arraySheets)

        Set wsSource = wbSource.Worksheets(arraySheets(S))
        Set wsTarget = wbTarget.Worksheets(arraySheets(S))
        curRow = wbTarget.Worksheets(arraySheets(S)).Range("A65536").End(xlUp).Row + 1
        If curRow < 4 Then curRow = 3
                       
        lastRow = wbSource.Worksheets(arraySheets(S)).Range("A65536").End(xlUp).Row
        lastcol = wbSource.Worksheets(arraySheets(S)).Range("A2").SpecialCells(xlLastCell).Column
        wsTarget.Activate

        Application.StatusBar = "Behandler..... " & tmpFile & "  Fane ....." & arraySheets(S)
                ' og nu de enkelte linier på hver fane
                          For R = 3 To lastRow
                                For C = 1 To lastcol
                                wsTarget.Cells(curRow, C) = wsSource.Cells(R, C)
                                Next C
                                wsTarget.Cells(curRow, C) = tmpFile
                                curRow = curRow + 1
                                countLines = countLines + 1
                        Next R
                        Next S

        ' Nu er fanerne gennemlæst
        ' her lukkes kildefilen igen uden at der er sket ændringer i den
        wbSource.Close savechanges:=False
        Application.StatusBar = ""
Next F

Worksheets("Admin").Range("E1") = "Data senest indlæst af : " & (Environ("UserName")) & "  d. " & Format(Now, "dd/mm/yy hh:mm:ss")
Application.ScreenUpdating = True
MsgBox "Indlæsning er færdig." & vbNewLine & "Ialt: " & countLines & " datalinier blev indsamlet" & vbNewLine & "fra ialt " & UBound(arrayFiles) & " filer", vbInformation, "Konsolidering af data"

End Sub
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

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