Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketSortering af regneark ved åbning

 Besvar Besvar
Forfatter
P.K.. Se dropdown
Forum Begynder
Forum Begynder


Medlem: 01.Jul.2017
Status: Offline
Point: 17
Direkte link til dette indlæg Emne: Sortering af regneark ved åbning
    Sendt: 01.Jul.2017 kl. 11:57
Følgende VBA er glimrende til at sortere et givent regneark.

Problemet er at jeg gerne ville den kørte på alle ark og ikke kun det der hedder "Ark7". Desværre kender jeg ikke antallet af ark eller navnene på dem. Kan det lade sig gøre ?

Sub MakroSortering()

    ActiveWorkbook.Worksheets("Ark7").ListObjects("Tabel7").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Ark7").ListObjects("Tabel7").Sort.SortFields.Add _
        Key:=Range("Tabel7[[#All],[VisBilag]]"), SortOn:=xlSortOnValues, Order:= _
        xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Ark7").ListObjects("Tabel7").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Til top



Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5412
Accepteret svar Accepteret svar
Direkte link til dette indlæg Sendt: 09.Jul.2017 kl. 11:09
Citér Derfor skal koden kun sortere på netop det regneark som er blevet oprettet.
Ja, det er jo ikke det, du skriver:
Citér jeg gerne ville den kørte på alle ark og ikke kun det der hedder "Ark7". Desværre kender jeg ikke antallet af ark eller navnene på dem.
Men, hvis du udskifter kode linjen...
For Each WS In ThisWorkbook.Worksheets
...med...
Set WS = ActiveSheet
...og, sletter den sidste kode linje, der hedder...
Next
...så burde makroen virke på det aktive faneblad/regneark, uanset, hvad det hedder.

Husk stadig, at fortælle, hvilke kolonner, der skal sorteres i konstanten i første kode linje.
Og, stadig angive dit/dine sorteringskriterie i .Add linjen.
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5412
Direkte link til dette indlæg Sendt: 07.Jul.2017 kl. 08:59
Der er flere forskellige problemstillinger i din opgave, der gør, at det kræver lidt 'fodarbejde'.

For det første benytter du fanebladets/regnearkets navn i din sortering, og da du selv nævner, at der kan være et vilkårligt antal faner/regneark, så kan vi heller ikke vide, hvad de hedder.
For det andet, så benytter du tabel navne i din sortering, og dette give samme problem som i punkt 1, men blot på tabel niveau.

Altså er vi nødt til at lave sorteringen af, hvert enkelt ark, på kolonne niveau, hvilket igen rejser en række problem stillinger.

For det første kan tabellerne være af forskellig længde (rækker), og for det andet kan der være eventuelle SUM rækker, der ikke skal medtages i sorteringen.

Kort sagt: Makroen skal lave det hele "manuelt".

Her er et forslag til, hvordan en sådan makro kunne se ud:
Sub MakroSortering()

' * ' Initialize
      Const Columns2Sort As String = "A:B"

      On Error Resume Next


' * ' Define variables
      Dim LastRow      As Long
      Dim
WS           As Excel.Worksheet
      Dim SingleColumn As Excel.Range


' * ' Sort given columns on each worksheet in the workbook
      For Each WS In ThisWorkbook.Worksheets
            LastRow = 2
            For Each SingleColumn In WS.Range(Columns2Sort).Columns
                  LastRow = WorksheetFunction.Max(LastRow, WS.Cells(WS.Rows.Count, SingleColumn.Column).End(xlUp).Row)
            Next

            With
WS.Sort
                  With .SortFields
                        .Clear
                        .Add Key:=Range("A2:A" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                  End With
                  .SetRange Range(Replace(Columns2Sort, ":", "1:") & LastRow)
                  .Header = xlYes
                  .MatchCase = False
                  .Orientation = xlTopToBottom
                  .SortMethod = xlPinYin
                  .Apply
            End With
      Next



ES: ' End of Sub
      Set WS = Nothing
      Set
SingleColumn = Nothing

End Sub
BEMÆRK!
Du er nødt til at angive, hvilke kolonner, der skal sorteres i konstanten i første kode linje.
Vær opmærksom på beregningen af 'LastRow', hvis du har eventuelle SUM rækker med, der ikke skal sorteres - træk selv det antal rækker fra, der ikke skal medtages.

Og, vigtigst:  I min definition af, hvad der skal sorteres på ('.Add' kode linjen) har jeg blot sagt, at der skal sorteres på kolonne A.
Dette skal du naturligvis ændre til dine egne sorteringskriterier.
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
Til top
P.K.. Se dropdown
Forum Begynder
Forum Begynder


Medlem: 01.Jul.2017
Status: Offline
Point: 17
Direkte link til dette indlæg Sendt: 09.Jul.2017 kl. 10:41
Tak for svar. Jeg når dog ikke helt i mål.

Jeg ønsker at benytte koden i bunden af en sub, som aktiveres når der genereres et nyt ark med en specifikation af data fra en pivottabel. Derfor skal koden kun sortere på netop det regneark som er blevet oprettet.

Det betyder at jeg ved at arkets navn er "Ark" men ikke om det er "Ark1", "Ark2" osv.

Jeg kender også opbygningen af tabellens kolonner herunder navne for de enkelte kolonner da de kommer fra Pivottabellen

I den konkrete case er der ikke sammentællinger i bunden, så det er ikke nødvendigt at tage hensyn hertil.

Men det er rigtigt at antallet af rækker er ukendt.
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5412
Accepteret svar Accepteret svar
Direkte link til dette indlæg Sendt: 09.Jul.2017 kl. 11:09
Citér Derfor skal koden kun sortere på netop det regneark som er blevet oprettet.
Ja, det er jo ikke det, du skriver:
Citér jeg gerne ville den kørte på alle ark og ikke kun det der hedder "Ark7". Desværre kender jeg ikke antallet af ark eller navnene på dem.
Men, hvis du udskifter kode linjen...
For Each WS In ThisWorkbook.Worksheets
...med...
Set WS = ActiveSheet
...og, sletter den sidste kode linje, der hedder...
Next
...så burde makroen virke på det aktive faneblad/regneark, uanset, hvad det hedder.

Husk stadig, at fortælle, hvilke kolonner, der skal sorteres i konstanten i første kode linje.
Og, stadig angive dit/dine sorteringskriterie i .Add linjen.
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
Til top
P.K.. Se dropdown
Forum Begynder
Forum Begynder


Medlem: 01.Jul.2017
Status: Offline
Point: 17
Direkte link til dette indlæg Sendt: 10.Jul.2017 kl. 16:22
Tak nu virker det.

Kunne dog ikke få det til at virke i starten. Tror det var fordi Set WS blev til Set ws når jeg trykkede enter...

I min fejlsøgning fik jeg ændret lidt på koden så den sidste del endte med at se således ud:

Range("A2:T & LastRow").Select
    ws.Sort.SortFields.Clear
    ws.Sort.SortFields.Add Key:=Range("A2:A" & LastRow), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ws.Sort
        .SetRange Range("A2:T" & LastRow)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5412
Direkte link til dette indlæg Sendt: 10.Jul.2017 kl. 17:39
Når bare du fik det til at virke  Smile

Jeg tror, at din .Select linje er overflødig, da jeg ikke kan se, at du bruger Selection nogensteder, men har du behov for den, så lad den endelig blive...
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk