Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[VBA] Sorteren

w.roosenburg
5 antwoorden
  • Als beginnerling ben ik bezig met het maken van een sorteer functie met VBA in Word.

    Het is de bedoeling dat er een aantal tekstbestanden worden gelezen. Deze bevatten altijd 2 regels. Nu wil ik graag dat o.b.v. de eerste regel er nieuwe textbestanden worden weggeschreven waarbij de volgorde van wegschrijven afhangt van de eerste regel van elk bestand. Dit moet namelijk alfabetisch gebeuren.

    Stel ik heb:
    testbestand0001.txt, met op regel1: "Bedankt" en op regel2: "100"
    testbestand0002.txt, met op regel1: "Alvast" en op regel2: "50"

    Nu wil ik de bestanden weer wegschrijven waarbij alfabetisch gesorteerd wordt op de eerste regel van elk bestand, dus nu zou het resultaat moeten zijn:
    testbestand0001.txt, met op regel1: "Alvast" en op regel2: "50"
    testbestand0002.txt, met op regel1: "Bedankt" en op regel2: "100"

    Het lezen van tekstbestanden lukt uiteraard wel. Ik weet alleen niet hoe ik het voorelkaar krijg om daarna te sorteren. Al veel gezocht maar helaas het juiste antwoord nog niet gevonden. Is er iemand die me op weg kan helpen??
  • Het komt dus ruwweg neer op het hernoemen van de bestanden.

    Een ideetje hoe je het zou kunnen aanpakken:
    Bouw een array op met daarin de waarden van "regel1" en "regel2" Sorteer vervolgens deze array op "Regel1"
    Maak nieuwe bestanden aan voor elke rij in het array in een andere map bijvoorbeeld.
    (evt. verwijder je de oorspronkelijke bestanden daarna)


    Suc6,
  • Ik ga eerst zoeken naar het aantal testbestanden, dit kan namelijk verschillen. Daarna ga ik ze inlezen. Maar dan? Hoe kan ik dan sorteren?

    [code:1:6a21bb9fd3]Sub alfabet()
    Dim Regel1(100000) As String
    Dim Regel2(100000) As String
    Dim tmp As String
    Dim i As Integer
    Dim b As Integer

    bestanden = "C:\Mijn Documenten\"

    With Application.FileSearch
    .NewSearch
    .LookIn = bestanden
    .SearchSubFolders = False
    .FileName = "testbestand"
    .MatchAllWordForms = True
    .FileType = msoFileTypeAllFiles
    If .Execute() > 0 Then aantal = .FoundFiles.Count

    i = 1

    For b = 1 To aantal
    Open .FoundFiles(b) For Input As #1
    Line Input #1, tmp
    Line Input #1, tmp2
    Regel1(i) = tmp
    Regel2(i) = tmp2
    i = i + 1
    Close #1
    Next b[/code:1:6a21bb9fd3]
    Of ben ik zo verkeerd bezig.
  • helaas kom ik er nog niet uit… misschien toch iemand die me kan helpen????
  • Ik ken VBA niet.
    Je bent volgens mij op de goede weg.

    Dimensioneer eerst een twee dimensionele array FoundF(b,2)

    For b = 1 To aantal
    Open .FoundFiles(b) For Input As #1
    Line Input #1, tmp
    Line Input #1, tmp2
    FoundF(b,1) = tmp
    FoundF(b,2) = tmp2
    Close #1
    Next b

    Ik hoop dat VBA een standaard sorteer commando kent (ook voor 2 dimensionele array's natuurlijk)

    SORT FoundF(),2,1 of iets dergelijks.
    Het bovenstaande betekent dat op het tweede element opvolgend gesorteerd moet worden.

    Is dit wat? Of maak ik het van kwaad tot erger?

    Suc6

    Abcott

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.