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).
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.
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"
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?
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.
Tak for hjælpen og information. Det er virkelig sødt af dig.
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.