Avatar billede dost02ab Nybegynder
23. november 2012 - 14:01 Der er 4 kommentarer

data fra mange filer til ét ark

Hej alle I kloge hoveder

Efter en del år uden brug af VBA har jeg desværre stort set glemt alt :-(

Jeg har et booking ark hvor man gerne via en knap skal vælge hvilken uge man gerne vil have data fra. Hvis der eksempelvis vælges uge 5 i booking arket, så skal makroen hente data fra over 100 ark for uge 5 (celle G15:G31).

Er der én der kan hjælpe?
Avatar billede H_Klein Novice
31. december 2012 - 16:36 #1
Hej dost02ab,

Herunder er et forslag til en løsning.

I det her eksempel lavede jeg blot 4 ark og til sidste et "Samlingsark" som er det ark hvor alle data samles.

Jeg har for nemheds skyld døbt arkene fra 1 til 4 men det kan jo ændres og makroen er skruet sådan sammen, at navnene ikke har noget betydning, da det kun er det første ark der skal vælges manuelt.

Skriv endelig hvis der er nogle spørgsmål :-)

-----------------------------------------------------------------

Sub Uge()

    Dim RK As Long
    Dim Uge As String
    Dim Ark As String
   
    'I denne boks indtastes det ønskede ugenr.
    Uge = InputBox("Indtast ugenr", "Ugenr")
   
    'Starter første del af loop
    '--------------------------
    'Her vælger makroen det første ark
    Sheets("1").Select
    Do
    Ark = ActiveSheet.Name
    RK = 2
    'Starter anden del af loop
    '--------------------------
    'Leder efter den valgte uge og kopierer data
    Do
    If Cells(RK, 1) <> Uge Then
    RK = RK + 1
    Else
    Range(Cells(RK, 1), Cells(RK, 2)).Select
    Selection.Copy
    RK = RK + 1
    End If
    Loop Until Cells(RK, 1) = Uge + 1
   
    'Efter at have fundet de korrekte data går makroen til arket "Samling" for at indsætte data
    Sheets("Samling").Select
    Cells(1, 1).Select
   
    'Her findes første ledige celle i arket "Samling" og data indsættes, hvorefter makroen går tilbage til den netop gennemsøgte ark og vælger næste ark til søgningen.
    If Cells(2, 1) = "" Then
    Cells(2, 1).Select
    ActiveSheet.Paste
    Else
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    ActiveSheet.Paste
    End If
    Sheets(Ark).Select
    ActiveSheet.Next.Activate
    'I dette eksempel hedder det sidste ark, som indeholder resultatet af søgningen "Samling"
    Loop Until ActiveSheet.Name = "Samling"
   
End Sub

-----------------------------------------------------------------

Med venlig hilsen

Henrik
Avatar billede dost02ab Nybegynder
03. januar 2013 - 12:38 #2
Hej Henrik

Tusind tak for dit svar. Jeg er sikker på at det er lige til at bruge. Men jeg er desværre så rusten at jeg må købe mig en bog for at forstå dét du skriver. For hvad betyder RK?

Igen mange tak for din besvarelse.

Med venlig hilsen
Dorte
Avatar billede H_Klein Novice
03. januar 2013 - 16:26 #3
Hej Dorthe,

RK er ganske enkelt en variabel der i det her tilfælde står for række.

Det vil sige at hvis RK=2 så betyder cells(rk,5) at det er række 2 kolonne 5 altså E2. (Jeps, det står modsat når man skriver det ind på den måde jeg benytter, men det vænner man sig hurtigt til...)

Det samme gælder for Uge og Ark der også er variabler som kan ændre værdi fra gang til gang alt efter hvad der indtastes.

I dette tilfælde er Uge lige ud af landevejen det ønskede ugenr. Der kommer en boks hvor du indtaster den uge du ønsker at få samlet og det ugenr du taster gemmes i makroen som variablen Uge.

Variablen Ark bruges til at fortælle hvad pågældende faneblad hedder så den kan finde tilbage. Det der sker er nemlig, at når du har indtastet ugenr, så går makroen til det første ark i filen og leder efter den pågældende uge. Når denne er fundet skifter makroen over til det ark som jeg har valgt at kalde "Samling" i mit eksempel og lægger de ønskede data ind i den første ledige række. Den starter nemlig oppe fra og arbejder sig nedefter til der er en ledig række og lægger data ind dér.

For at makroen derefter skal kunne finde tilbage til det første ark, har vi tildelt variablen Ark, navnet på fanebladet, så makroen kan finde pågældende faneblad igen. Derfra går den så til næste faneblad og variablen Ark tildeles nu navnet på det nye faneblad og så starter den forfra med at finde data og lægge dem ind i "Samlings-arket" igen.


Hvis du har mod på det, kan du jo prøve at lave en kopi af dit ark, med alle fanebladene og lægge et ark ind til sidst (helt til højre) som du giver et sigende navn eller i første omgang kalder det "Samling" så makroen passer og derefter ændrer den i linien som jeg har kopieret ind herunder fra starten af makroen så Sheets("1").Select kommer til at hedde Sheets("Det første ark i din fil").Select

  'Her vælger makroen det første ark
    Sheets("1").Select

Dér hvor jeg kopiere data som skal over i samlingsarket bruger jeg en "Range-kommando" som i mit eksempel hedder "Range(Cells(RK, 1), Cells(RK, 2)).Select" hvilket betyder at hvis RK=2 så vil den vælge A2+B2. Hvis du nu skal bruge indholdet fra celle A2 til H2 skal der i stedet stå "Range(Cells(RK, 1), Cells(RK, 8)).Select"

Ligeledes vil det også være sådan, at hvis nu det første ugenr står i række 6 så skal RK=2 blot ændres til RK=6 hvorefter makroen starter fra denne række i stedet for række to.

Så tror jeg muligvis at du kan få det til at køre uden at gøre meget mere, hvis alt flasker sig og ellers er du velkommen til at skrive igen.


Med venlig hilsen

Henrik
Avatar billede dost02ab Nybegynder
07. januar 2013 - 09:50 #4
Tak for hjælpen og information. Det er virkelig sødt af dig.
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
Kurser inden for grundlæggende programmering

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