• 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.

formule sorteren verkorten in VBA

Status
Niet open voor verdere reacties.

Egbert12345

Gebruiker
Lid geworden
13 dec 2010
Berichten
521
Beste forummers, in VBA heb ik een opdracht opgenomen die een bepaalde reeks sorteert. Zie onderstaand voorbeeld. De eerste serie werkt, maar ik wil die verkorten.
Zie vanaf 'verkort. Ik ben al begonnen met (Sheets("grootboekrekeningen").Range("B1:D" & eindebereik & "").Sort.SortFields.Clear), maar daar loopt de macro al vast. Weten jullie wat ik verkeerd doe (de rest heb ik nog niet aangepast). Mochten jullie een testvoorbeeld willen zien, dan hoor ik dat graag.
groet Egbert



Sub TEST_sorteren()
eindebereik = 57

Sheets("grootboekrekeningen").Select
Range("B1:D" & eindebereik & "").Select
ActiveWorkbook.Worksheets("grootboekrekeningen").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("grootboekrekeningen").Sort.SortFields.Add2 Key:=Range("B2:B" & eindebereik & ""), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("grootboekrekeningen").Sort
.SetRange Range("B1:D" & eindebereik & ""): .Header = xlYes: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply: End With:
Range("A2").Select


' verkort
Sheets("grootboekrekeningen").Range("B1:D" & eindebereik & "").Sort.SortFields.Clear

ActiveWorkbook.Worksheets("grootboekrekeningen").Sort.SortFields.Add2 Key:=Range("B2:B" & eindebereik & ""), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("grootboekrekeningen").Sort
.SetRange Range("B1:D" & eindebereik & ""): .Header = xlYes: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply: End With:
Range("A2").Select


End Sub
 
Geen codetags, code is niet te lezen zo, en geen voorbeeld documentje.
 
Glazen bol:

Code:
Sub M_snb()
  sheets("grootboekrekeningen").cells(1).currentregion.sort sheets("grootboekrekeningen").cells(1,2)
End Sub
 
Heb je de glazen bol van snb al getest?
Altijd de moeite waard :)
 
Die doet niet wat ik wil. Ik heb die macro getest op het voorbeeldbestandje.
 
Zo?
Code:
With Sheets("blad1").Sort
    .SortFields.Clear
    .SortFields.Add2 Key:=Range("B3:B6"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange Range("B2:C6")
    .Header = xlYes
End With
 
Op de een of andere manier sorteert dit niet goed. Ik had mijn vraag overigens beter moeten omschrijven, sorry daarvoor.
Wat ik eigenlijk wil is de code zodanig verkorten dat ik deze sorteeropdracht kan uitvoeren terwijl ik in een andere werkblad sta.
Misschien vraag ik wel iets wat niet mogelijk is. Laat verder maar zitten. Bedankt voor jullie medewerking.
 
Wijzig dan de Range dingen in .Range

Code:
With Sheets("blad1").Sort
    .SortFields.Clear
    .SortFields.Add2 Key:=.Range("B3:B6"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange .Range("B2:C6")
    .Header = xlYes
End With
 
Je maakt mij niet wijs dat dit een representatief voorbeeldbestand is.
Slechte vragen en goede antwoorden geven altijd nog onjuiste resultaten.
 
Jammer van je toonzetting SNB, ik sluit deze vraag, hier heb ik geen zin in. Misschien is niet iedereen zo slim als jij bent.
 
Volgens mij heb jij een vraag. Het voorbeeldbestand sluit niet aan bij de onleesbare code in #1. Je kan alsnog het bericht aanpassen. Ook op de suggestie in #9 reageer je niet.

Code:
Sub VenA()
  With Sheets("Blad1").Cells(2, 2).CurrentRegion
    .Sort .Cells(1), 2, , , , , , xlYes
  End With
End Sub

Als je het op 1 regel wil dan lukt het ook nog wel.
 
Bedankt allen, excuus dat ik niet heb gekeken suggestie #9 van Edmoor. Die methode begrijp ik beste, maar die opdracht werkte niet. Toen ik het vergeleek met de originele codes zag ik dat er twee keer een punt teveel stond (beiden bij de Range) als ik het goed interpreteer. De macro loopt namelijk vast.

Ik heb een nieuw testbestandje bijgevoegd (test sorteren(1) en daar de code aangepast. Nu loopt die niet meer vast, maar sorteert niet op kolom B.

Doe ik weer iets verkeerd?
 

Bijlagen

Maak er eens dit van:
Code:
Sub Voorbeeld_EdMoor()
    With Sheets("blad1").Sort
        .SortFields.Clear
        .SortFields.Add2 Key:=Range("B3:B6"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("B2:C6")
        .Header = xlYes
        .Apply
    End With
End Sub
 
Ik was zelf de .Apply vergeten ;)
 
@Ad19

Het eerste sorteerveld in jouw code verwijst naar het aktieve werkblad, dat hoeft niet Blad1 te zijn.
 
Laatst bewerkt:
Wat ik eigenlijk wil is de code zodanig verkorten dat ik deze sorteeropdracht kan uitvoeren terwijl ik in een andere werkblad sta.
Dan mis ik nog een punt.
Code:
with sheets("Blad1")
.Range("B2:C6").Sort .Range("B2"), 1, , , , , , 1
End with
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan