Avatar billede living8671 Nybegynder
26. september 2010 - 23:04 Der er 13 kommentarer og
1 løsning

Data fra mange ark, skal samles i et ark .. hjælp

Hej Eksperter,

Jeg har en workbook der indeholder mange sheets, alle med forskellige navne, og der kommer hele tiden flere til. Hver sheet har et fast data-område (kolonne a til h, række 7 til 40) som jeg godt kunne tænke mig at kunne samle i ét ark og undlade rækker hvor der ingen data er. Ind til videre har det fungeret via copy/paste metoden, meeeen det er sgu ikke særlig effektivt.
Findes der en genial løsning?

Mvh
De uvidende :)
Avatar billede kabbak Professor
26. september 2010 - 23:41 #1
Ok prøv denne, sættes i et modul

Lav et nyt ark og navngiv den SamleArk, det er her den gemmer.

koden virker forudsat at der altid er data i kolonne A, når rækken ikke er tom.
Ellers ret kolonne bogstavet i sidste linje.

Public Sub HentArk()
    Dim Ws As Worksheet, data As Variant
    Worksheets("SamleArk").Cells.ClearContents

    For Each Ws In ThisWorkbook.Sheets
        If Ws.Name <> "SamleArk" Then
            data = Ws.Range("A7:H40")
            Worksheets("SamleArk").Range("A65536").End(xlUp).Offset(1, 0).Resize(UBound(data, 1), UBound(data, 2)) = data
        End If
    Next
    Range("A1:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete Shift:=xlUp
End Sub
Avatar billede living8671 Nybegynder
26. september 2010 - 23:57 #2
Genialt - mange tak
Avatar billede living8671 Nybegynder
26. september 2010 - 23:59 #3
Genialt - tak
Avatar billede kabbak Professor
27. september 2010 - 00:00 #4
;-)) et svar
Avatar billede living8671 Nybegynder
07. oktober 2010 - 19:24 #5
Kan man gøre noget således at de data der indsættes i samlearket beholder deres formattering. Og kan samlearket tage overskriften A4:H6 fra en af de ark der samles fra. Overskrifterne er ens i alle ark, og altid A6:H6
Avatar billede kabbak Professor
07. oktober 2010 - 20:55 #6
Public Sub HentArk()
    Dim Ws As Worksheet, data As Variant
    Worksheets("SamleArk").Cells.ClearContents

    For Each Ws In ThisWorkbook.Sheets
        If Ws.Name <> "SamleArk" Then
            Ws.Range("A6:H6").Copy Worksheets("SamleArk").Range("A1")
            Ws.Range("A7:H40").Copy Worksheets("SamleArk").Range("A65536").End(xlUp).Offset(1, 0)
        End If
    Next
    Range("A1:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete Shift:=xlUp
End Sub
Avatar billede living8671 Nybegynder
07. oktober 2010 - 21:54 #7
Du er godt nok skarp til det her og det er 99% korrekt - mangler bare at tage celler farver med over i samlearket.
MANGE tak for hjælpen.
Avatar billede kabbak Professor
07. oktober 2010 - 21:59 #8
den burde tage cellefarver med, men hvis de er der pga. betinget formatering, kommer de ikke med.

Almindelige baggrundsfarve kommer med, er testet.
Avatar billede living8671 Nybegynder
09. oktober 2010 - 15:48 #9
Mange tak - yes, nu virker det.
Hvis jeg har to Sheets som denne makro ikke skal tage data fra og lægge i samlearket, kan man så gøre noget smart? (sheet navne "overview" & "kunder")
Avatar billede kabbak Professor
09. oktober 2010 - 19:46 #10
If Ws.Name <> "SamleArk" or Ws.Name <> "overview" or Ws.Name <> "kunder" Then
Avatar billede living8671 Nybegynder
09. oktober 2010 - 23:53 #11
Hvis koden skal se sådan her ud, så virker det desværre ikke!

Public Sub HentArk()
    Dim Ws As Worksheet, data As Variant
    Worksheets("SamleArk").Cells.ClearContents

    For Each Ws In ThisWorkbook.Sheets
        If Ws.Name <> "SamleArk" or Ws.Name <> "overview" or Ws.Name <> "kunder" Then
            Ws.Range("A6:H6").Copy Worksheets("SamleArk").Range("A1")
            Ws.Range("A7:H40").Copy Worksheets("SamleArk").Range("A65536").End(xlUp).Offset(1, 0)
        End If
    Next
    Range("A1:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete Shift:=xlUp
End Sub

Overskrifterne i samlearket forsvinder, og der hentes data fra de ark som skulle springes over, og nogle data bliver gengivet i samlearket 2 gange.

Ved ikke hvad der går galt....
Avatar billede kabbak Professor
10. oktober 2010 - 18:14 #12
sorry, det skulle være And

Public Sub HentArk()
    Dim Ws As Worksheet, data As Variant
    Worksheets("SamleArk").Cells.ClearContents

    For Each Ws In ThisWorkbook.Sheets
        If Ws.Name <> "SamleArk" And Ws.Name <> "overview" And Ws.Name <> "kunder" Then
        Debug.Print Ws.Name
            Ws.Range("A6:H6").Copy Worksheets("SamleArk").Range("A1")
            Ws.Range("A7:H40").Copy Worksheets("SamleArk").Range("A65536").End(xlUp).Offset(1, 0)
        End If
    Next
    Range("A1:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete Shift:=xlUp
End Sub
Avatar billede kabbak Professor
10. oktober 2010 - 18:14 #13
fjern lige linjen
Debug.Print Ws.Name
Avatar billede living8671 Nybegynder
10. oktober 2010 - 19:48 #14
Så sidder den i skabet. Mange mange tak.
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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