• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Macro waarbij ook toekomstige cellen worden gesorteerd

Status
Niet open voor verdere reacties.

jazzmatazz

Gebruiker
Lid geworden
5 apr 2007
Berichten
140
Hallo,

Ik heb een werkblad met daarin verschillende kolommen. In 37 rijen staan tot nu toe gegevens, maar dat aantal zal snel oplopen. Ik wil de verzameling gegevens sorteren, eerst op kolom E, vervolgens op kolom F en tenslotte op kolom A. Ik gebruik daarvaar de functie ALT + D + S. Daarnaast filter ik nog kolom I. Ik wil er een geautomatiseerde functie van maken zodat ik niet elke keer alle sorteer en filterhandelingen één voor één hoef uit te voeren. Omdat ik niet heel bedreven ben in VBA, heb ik een macro opgenomen. Daarbij gebruik ik opnieuw de functie functie ALT + D + S. De macro ziet er dan zo uit.

Sub Overview()
'
' Overview Macro
'
' Keyboard Shortcut: Ctrl+o
'
ActiveWindow.SmallScroll Down:=-15
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add2 Key:= _
Range("E4:E37"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add2 Key:= _
Range("F4:F37"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder _
:="Me,Other,None", DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add2 Key:= _
Range("A4:A37"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveSheet.Range("$A$3:$J$37").AutoFilter Field:=9, Criteria1:="=Open", _
Operator:=xlOr, Criteria2:="=Reopened"
End Sub

Als ik nu rijen met gegevens ga toevoegen en ik voer de macro uit, merk ik dat rijen 38 en verder niet mee worden gesorteerd. In de VBA tekst zie ik dat er verwijzingen zijn naar rij 37. Ik leid hier uit af dat hij denkt dat hij alleen t/m rij 37 moet sorteren. Maar ik wil graag dat hij altijd alles sorteert, dus ook rij 38 en verder, als daar op een later moment gegevens in komen te staan. Ik heb al geprobeerd om de getallen 37 in de macro te wijzigen in bv. 600 (rij 600), maar dat levert alleen foutmeldingen en forced closures van Excel op.

Hoe kan ik er nou voor zorgen dat hij alle kolommen sorteert waar zich gegevens in bevinden (en dus ook toekomstige kolommen)?

Dank alvast voor suggesties.

De macro
 
Als je 'Range("A4:A37")' een naam geeft met een dynamisch bereik is denk ik het probleem ook opgelost.
 
Laatst bewerkt:
Als het aansluitende kolommen zijn, maak dan van je gegevens een echte tabel. Beter: plaats een voorbeeld Excel bestand
 
Doe mij ook maar een tabel. Maarja, zo kan het ook voor je hele code

Code:
Sub j()
 With Cells(4, 1).CurrentRegion
  .AutoFilter
  .Sort [E5], 1, [F5], , 1, , , 1
  .AutoFilter 9, "Open", 2, "Reopened"
 End With
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan