23. juli 2002 - 10:31Der er
11 kommentarer og 1 løsning
Formatere et navn til f-navn, e-navn og sortere efter efternavn?
Hej Eksperter!
Jeg har en tabel med nogle personer. I det ene tabellen skriver jeg en persons fulde navn ind. Dette felt skal jeg have formateret i en rapport til "EFTERNAVN, FORNAVN" og derefter sortere efter efternavnet. Der skal også tages højde for personer med mellemnavn, så formatteringen skriver: "EFTERNAVN, MELLEMNAVN FORNAVN"
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Hvis du har det fulde navn i en streng kan du med InStr() 0g RTrim() "fange" efternavnet og derefter sætte det ind i en liste med "Efternavn", & "Fornavn(e)"
Det var vist ikke helt nok! Her er et lille program der kan gøre det:
Private Sub Command1_Click() Dim Str, Str2, Pos As String Str = RTrim(InputBox("Skriv et navn")) 'Fjerner evt. h-stillede mellemrum Pos = InStr(1, StrReverse(Str), " ", vbTextCompare) 'Finder 1. mellemrum If Pos = 0 Then 'Hvis der nu kun er ét eller ingen ord i strengen Me.Caption = Str Else Str2 = Right(Str, Pos - 1) 'Skriver det 1. ord i strengen Me.Caption = Str2 & ", " & StrReverse(Mid(StrReverse(Str), Pos)) End If End Sub
Det var bare fordi du kan få den nye datastring "Efternavn, Fornavne" sorteret automatisk i en ListBox. Altså ikke "bare" sorteret efter efternavn men sorteret efter hele navnet med "Efternavn, " først og resten af navnet også - helt gratis(læs automatisk). Listnavn.Sorted = True
Ellers skal du kode en rutine der sorterer data først. Desværre må jeg løbe får ikke tid til det med rapporten. Alternativt kan du bruge ListBox som grundlag for rapporten.
ok... Jeg vil sikkert lave det som en listeboks, hvis det er lettere. Bare det ikke vises som en listeboks ved udskrift. Jeg kigger på det om et par timer. Jeg er lige optaget af noget andet. Ellers tak for hjælpen indtil videre.
PS. Du får pointene når det virker. Skulle være i løbet af aftenen!
Jeg kan ikke lige se det sådan lige på en studs;-\ Kort fortalt skal data sorteres inden de sendes til rapporten. Du har et felt "Navn" som rapporten sorteres efter (det bli'r den også) men når der så efterfølgende bliver byttet på for- og efternavn passer det jo ikke længere. Du kan ikke lave den manipulering når rapporten bliver genereret da det er de manipulerede data du vil sorterer efter. En meget simpel løsning kunne være at oprette et ekstra felt af det sammensatte navn "Efternavn, Fornavne" som automatisk blev dannet hver gang du opretter et nyt navn og så bare bruger dette "snydefelt" når data skal sorteres efter dette princip.
Var lige ude at køre! - Her er et forslag: Det er simpelt, men det virker!
Tabel.Stamdata: Tilføj et felt der hedder 'Navn2' FormularQuery (Må ikke slettes): Hiv 'Navn2' ned ved siden af 'Navn' frmStamdata: Indsæt et textfelt med 'Navn2' (fjern etiket, gør den usynlig) og indsætter følgende kode:
Private Sub Fornavn_LostFocus() Dim Str, Str2, Pos As String Str = Me.Fornavn 'RTrim(Me.Navn) Pos = InStr(1, StrReverse(Str), " ", vbTextCompare) If Pos = 0 Then 'Hvis der nu kun er ét eller ingen ord i strengen Me.Navn2 = Str Else Str2 = Right(Str, Pos - 1) 'Skriver det 1. ord i strengen Me.Navn2 = Str2 & ", " & StrReverse(Mid(StrReverse(Str), Pos)) End If End Sub
Rapport Snitskema til SJBU: Fjern al kode. Fjern TestTekst. Gør 'Navn' synlig og flyt det op på plads. Ændrer gruppesorteringen til det nye felt 'Navn2'.
Nu har du det ønskede resultat ved alle nyoprettede navne. Fidusen er også at den sorterer på HELE det sammensatte navn så din gamle liste ser sådan ud: Andersen, Peter Andersen, Svend-Erik Osv
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.