13. juli 2006 - 10:49Der er
31 kommentarer og 2 løsninger
søgning i et array
jeg har brug for lidt experthjælp til følgende i en userform
Jeg har et array i kolonne b. Heri laver jeg en søgning som udvælger f.eks. 4 elementer. I kolonne D, står nogle datoer, som hører til de 4 elementer. Jeg vil gerne have de 4 datoer i kolonne D sorteret, således at den nyeste dato står først og gemt i en variabel. Håber der er nogle der kan hjælpe.
Det er en userform lavet i VBA. Der er ikke tale om en listebox, men om en textbox. Jeg har et range i kolonne B. hvor jeg gennemsøger for et reg. nummer Det nummer kan forekomme flere gange i mit range. Når jeg trykker på søgeknappen fremkommer det første match. trykkes igen kommer det næste match osv. Min opgave er så at det første match jeg får i søgningen skal være det match med den nyeste dato. og dernæst den næst nyeste osv. håber det kastede lys over opgaven. mvh/Hubertus
Synes godt om
Slettet bruger
14. juli 2006 - 10:22#3
Læg dette ind i din userforms sourcecode.
Jeg går ud fra, du selv kan konfigurere således outputtet bliver indsat hvor du vil have det..
Private date_index As Integer
Private Sub CommandButton1_Click()
Dim row As Integer, date_string As String, tmp_arr() As Date, count As Integer
Hej igen Jeg har forsøgt at få din rutin til at virker, uden held indtil videre. Det går galt i linien: ReDim date_arr(count - 1) hvor count er 0 og derfor giver en: Type mismatch. Mit spørgsmål udspringer af et andet spørgsmål her på eksperten, som hedder søgerutine. her kan du se en del af den kode som rutinen skal bruges sammen med.
mvh. Hubertus ps. tak for hurtigt svar :-)
Synes godt om
Slettet bruger
14. juli 2006 - 11:30#5
Prøv den her, hvor jeg har added dette:
if Me.TextBox1 = "" then msgbox("No search string specified") exit sub end if
if count = 0 then msgbox("No match found") exit sub end if
Jeg må indrømme jeg ikke har nærlæst det andet spm..
Private date_index As Integer
Private Sub CommandButton1_Click()
if Me.TextBox1 = "" then msgbox("No search string specified") exit sub end if
Dim row As Integer, date_string As String, tmp_arr() As Date, count As Integer
hej igen Det ser ud til at den sortere datoerne fint og ender op med nyeste dato, men den mangler den facilitet at jeg ved gentagene tryk på søgeknappen vil komme igennem rækken af match. Det var derfor jeg gerne ville have den bygget sammen med rutinen fra mit tidligere spørgsmål, som opfylder den ønsket om at kunne gennemløbe de match der var. Hvordan kan de to bygges sammen?
'Loads all dates in D row if seach string (txttrailer_reg input) is in column B. If Range("B1") <> "" Then
For row = 1 To Sheets("ark1").Range("B65536").End(xlUp).row
If InStr(1, UCase(Sheets("ark1").Range("B" & row)), UCase(Me.txttrailer_reg)) Then
tmp_arr(count) = row
count = count + 1
End If
Next
End If
if count = 0 then msgbox("No match found") exit sub end if
Dim row_arr As integer t As Integer, i As Integer, latest_date_index As Integer
'Sorts the tmp_arr into the row_arr ReDim row_arr(count - 1)
For t = 0 To count - 1
latest_date_index = 0
For i = 0 To count - 1
If tmp_arr(latest_date_index) <> Empty Then
If Sheets("ark1").Range("D" & tmp_arr(i)) > Sheets("ark1").Range("D" & tmp_arr(latest_date_index)) Then
latest_date_index = i
End If
End If
Next
row_arr(t) = tmp_arr(latest_date_index)
tmp_arr(latest_date_index) = Empty
Next
'Outputs the [n] newest date where [n] increases for each search. sheets("ark1").activate Range("D" & date_arr(date_index)).select read_data(date_arr(date_index))
hejsa Rutinen virker fint hvis jeg afprøver det i et regneark, men ikke i mit sammenhæng. Det hænger formentlig sammen med, at min kolonne B ikke starter i række 1, men først i række 3. Men den skal jeg nok få styr på, når jeg har gennemarbejdet rutinen. Et afklarende spørgsmål: hvorfor sætter du ændre du txttrailer_reg til Me.txttrailer_reg? hvilken betyning har det? mvh Hubertus
Hej igen Jeg kan ikke få den sidste rutine til at fungere. Den stopper hele tiden ved linien ReDim tmp_arr(Sheets("ark1").Range("B65536").End(xlUp).row - 1). jeg for en meddelelse om at der forventes et array. Hvis jeg har forstået Redim korrekt, så er det en måde at reservere et antal pladser - her til antal rækker i kolonne B. Er det korrekt opfattet? Kan du gennemskue problemet?
Synes godt om
Slettet bruger
24. juli 2006 - 11:54#11
Me kan åbenbart udelades i Me.txttrailer_reg - det var jeg ikke klar over.
Angående ReDim skal der være () efter Dim af variable for at platformen genkender den som array:
Dim tmp_arr as Integer -> Dim tmp_arr() as Integer
Jeg har rettet det her - desuden har jeg sat start_row til 3.
Private date_index As Integer Private Sub cmdSøg_Click() If Me.txttrailer_reg = "" Then MsgBox "Ugyldigt Reg. nr." txttrailer_reg.SetFocus Exit Sub End If
Dim row As Integer, date_string As String, tmp_arr() As Integer, count As Integer, start_row As Integer start_row = 3
ReDim tmp_arr(Sheets("ark1").Range("B65536").End(xlUp).row - 1) As Integer
'Loads all dates in D row if seach string (txttrailer_reg input) is in column B. If Range("B" & start_row) <> "" Then For row = start_row To Sheets("ark1").Range("B65536").End(xlUp).row If InStr(1, UCase(Sheets("ark1").Range("B" & row)), UCase(Me.txttrailer_reg)) Then tmp_arr(count) = row count = count + 1 End If Next End If
If count = 0 Then MsgBox ("No match found") Exit Sub End If
Dim row_arr() As Integer, t As Integer, i As Integer, latest_date_index As Integer
'Sorts the tmp_arr into the row_arr ReDim row_arr(count - 1) For t = 0 To count - 1 latest_date_index = 0 For i = 0 To count - 1 If tmp_arr(i) <> 0 Then If tmp_arr(latest_date_index) = 0 Then latest_date_index = i End If If Sheets("ark1").Range("D" & tmp_arr(i)) > Sheets("ark1").Range("D" & tmp_arr(latest_date_index)) Then latest_date_index = i End If End If Next row_arr(t) = tmp_arr(latest_date_index) tmp_arr(latest_date_index) = 0 Next
'Outputs the [n] newest date where [n] increases for each search. Sheets("ark1").Activate Range("D" & row_arr(date_index)).Select 'read_data (row_arr(date_index))
If date_index <> count - 1 Then date_index = date_index + 1 Else date_index = 0 MsgBox ("You have seen all matches") End If End Sub Private Sub txttrailer_reg_Change() date_index = 0 End Sub
Hej igen Dit forslag virker helt efter hensigten. Det var præcis det jeg søgte. - det tog mig blot lidt tid at gennemskue den. :-) - det har været lærerigt for mig - tak for det.
Kan du kaste lidt lys over forskellen på Me.txttrailer_reg og txttrailer_reg. hvilke betydning har Me?
jeg var vist lidt hurtig før. Den finder ganskevist den række med det højeste nummer, men det jeg gerne ville var at der søges på indholdet i cellen som er en dato. Den søgning der skal komme frem først er den nyeste dato osv. Kan du fikse det? så smider jeg gerne nogle point ovenpå. mvh / hubertus
Synes godt om
Slettet bruger
27. juli 2006 - 16:00#14
Først må jeg lige være helt sikker på, hvad der skal laves.
Hvad skal der søges efter i formen? er det på en serial eller en dato? Hvad skal vises serial eller dato eller noget helt tredje? Og hvilke kolonner er dataen gemt i?
Der søges på col B, som indeholder trailer_reg nr. helt som hidtil. en trailer_reg kan være registreret flere gange på forskellige datoer, som står i kolonne E. Når matchene (col B), skal vises så skal den nyeste dato (col E) vises først. Mao, først findes matchene, dernæst sorteres de fundne matcht efter dato, så den nyeste fremkommer først. Håber det kastede lidt lys over sagen
Der må kunne arbejds med row_arr() som peger på de rækker med et match. her er rækkerne sorteret således at den række med højeste nummer vises først. Kunne man fokucere på celleindholdet i col E og sortere dem?
Synes godt om
Slettet bruger
28. juli 2006 - 10:18#17
Jeg har rettet col "D" til col "E".. måske det er derfor du ikke får, hvad du vil have?! - ellers må du beskrive mere detaljeret, hvilken data du vil have og med hvilke kriterier..
Private date_index As Integer Private Sub cmdSøg_Click() If txttrailer_reg = "" Then MsgBox "Ugyldigt Reg. nr." txttrailer_reg.SetFocus Exit Sub End If
Dim row As Integer, date_string As String, tmp_arr() As Integer, count As Integer, start_row As Integer start_row = 3
ReDim tmp_arr(Sheets("ark1").Range("B65536").End(xlUp).row - 1) As Integer
'Loads all dates in E row if seach string (txttrailer_reg input) is in column B. If Range("B" & start_row) <> "" Then For row = start_row To Sheets("ark1").Range("B65536").End(xlUp).row If InStr(1, UCase(Sheets("ark1").Range("B" & row)), UCase(txttrailer_reg)) Then tmp_arr(count) = row count = count + 1 End If Next End If
If count = 0 Then MsgBox ("No match found") Exit Sub End If
Dim row_arr() As Integer, t As Integer, i As Integer, latest_date_index As Integer
'Sorts the tmp_arr into the row_arr ReDim row_arr(count - 1) For t = 0 To count - 1 latest_date_index = 0 For i = 0 To count - 1 If tmp_arr(i) <> 0 Then If tmp_arr(latest_date_index) = 0 Then latest_date_index = i End If If Sheets("ark1").Range("E" & tmp_arr(i)) > Sheets("ark1").Range("E" & tmp_arr(latest_date_index)) Then latest_date_index = i End If End If Next row_arr(t) = tmp_arr(latest_date_index) tmp_arr(latest_date_index) = 0 Next
'Outputs the [n] newest date where [n] increases for each search. Sheets("ark1").Activate Range("E" & row_arr(date_index)).Select 'read_data (row_arr(date_index))
If date_index <> count - 1 Then date_index = date_index + 1 Else date_index = 0 MsgBox ("You have seen all matches") End If End Sub Private Sub txttrailer_reg_Change() date_index = 0 End Sub
hej igen. Jeg havde selv rettet D til E, så det er ikke problemet. du skal forestille dig at du har et registreringsnummer på en bil i kolonne B og den dato hvor bilen er lejet i kolonne E. Søgningen går så på den enkelt bil. Den kan f.eks. give 4 match på 4 forskellige dage. Det jeg har brug for er, at når matchene er fundet, så skal de fremvises i formen, således at den nyeste dag, hvor bile er lejet skal vises først, og dernæst den næstnyeste indtil alle datoerne er vist. Mao. først skal registreringsnumrene findes, dernæst skal datoerne sorteres, så den nyest dato vises først.
Som rutinen er nu, så viser den det registreringsnummer, der står i den række med højeste rækkenummer, som den første. Den sortere ikke på celleindholdet i kolonne E. mvh. / hubertus
Synes godt om
Slettet bruger
28. juli 2006 - 14:27#19
Ok.. så kan det se nogenlunde sådan her ud (jeg har added label til formen, hvor outputtet bliver vist). Jeg har også ændret det så det skal matche 100% (før søgte man efter en del af registreringsnummeret - dvs. ved '1' blev der fundet alle numre indeholdende '1').
Koden kan nok optimeres noget, for jeg har taget udgangpunkt i det, jeg allerede har lavet.
Option Explicit Private Sub cmdSøg_Click() If txttrailer_reg = "" Then Label1 = "Ugyldigt Reg. nr." txttrailer_reg.SetFocus Exit Sub End If
Dim row As Integer, date_string As String, tmp_arr() As Integer, count As Integer, start_row As Integer start_row = 3
ReDim tmp_arr(Sheets("ark1").Range("B65536").End(xlUp).row - 1) As Integer
'Loads all dates in E row if seach string (txttrailer_reg input) is in column B. If Range("B" & start_row) <> "" Then For row = start_row To Sheets("ark1").Range("B65536").End(xlUp).row If Trim(UCase(Sheets("ark1").Range("B" & row))) = Trim(UCase(txttrailer_reg)) Then tmp_arr(count) = row count = count + 1 End If Next End If
If count = 0 Then Label1 = "Reg. nr. ikke fundet" Exit Sub End If
Dim t As Integer, i As Integer, latest_date_index As Integer
Label1 = "Søgning efter Reg. nr. " & txttrailer_reg
'Sorts the tmp_arr into the row_arr For t = 0 To count - 1 latest_date_index = 0 For i = 0 To count - 1 If tmp_arr(i) <> 0 Then If tmp_arr(latest_date_index) = 0 Then latest_date_index = i End If If Sheets("ark1").Range("E" & tmp_arr(i)) > Sheets("ark1").Range("E" & tmp_arr(latest_date_index)) Then latest_date_index = i End If End If Next Label1 = Label1 & Chr(10) & Range("B" & tmp_arr(latest_date_index)) & " - " & Range("E" & tmp_arr(latest_date_index)) tmp_arr(latest_date_index) = 0 Next End Sub
det var et stykke af vejen :-) men den lister stadig efter række nummer og ikke efter datoen. Den første dato der gemmes i label1 er den dato der står i den rækken med det største rækkenummer, dernæst datoen med den næsthøjeste osv. Kan du sortere de datoer der gemmes i label1?
mvh / hubertus
Synes godt om
Slettet bruger
29. juli 2006 - 08:54#21
Hvilket format er datoerne på??
Måske ser excel dem ikke som datoer.. Hvis det er teksstrenge med et bestemt format, kan jeg bare lave dem om til dato..
Jeg har pt. formateret dem som dato, men vil helst have at formatet sættes via vba koden. Jeg ved ikke om jeg helt har forstået den sidste del af koden, men når jeg ser på indholdet af label1, så er indholdet listet efter rækkenummeret angivet med den bil der står i den række med det højeste nummer først. Mao, når du organisere rækkefølgen så sker det som en følge af rækkenummeret og ikke som en sortering af cellernes indhold. Er det korrekt opfattet?
Strengen som skriver datoen i regnearket ser således ud: Cells(mlrowdisplayed, 5) = UCase(Left(txtStartDato.Text, 1)) & LCase(Mid(txtStartDato.Text, 2))
Synes godt om
Slettet bruger
30. juli 2006 - 21:58#24
Hvilket format er datoen (hvad indeholder txtStartDato.Text)?
Er det DD-MM-YYYY eller er det tekst (som January 2nd 2006) eller noget i den stil?
Sorteringen er ikke baseret på rækkenummeret..
tmp_arr indeholder rækkenumre, men der bliver søgt på Sheets("ark1").Range("E" & tmp_arr(i)) - dvs. rækkenummeret bare er index for dato er reg. nr. værdierne..
Cellerne er formateret som en dato: af typen DD-MM-YYYY eks. 12-03-2006. Reelt indtaster brugeren blot en tekststreng, som formatet derefter tilretter. Det optimale ville havde været at der var en maske som styrede indtastningen af datoen.
Jeg har prøvet at se på indholdet af label1 med en msgbox. Her ses det tydeligt at celleindholdet ikke opfattes som en dato. da jeg får linierne udskrevet med det højeste rækkenummer først. mvh. Hubertus
Synes godt om
Slettet bruger
31. juli 2006 - 10:54#27
Prøv med dette - create_date_from_string skal være i et modul for sig.
Option Explicit Private Sub cmdSøg_Click() If txttrailer_reg = "" Then Label1 = "Ugyldigt Reg. nr." txttrailer_reg.SetFocus Exit Sub End If
Dim row As Integer, date_string As String, tmp_arr() As Integer, count As Integer, start_row As Integer start_row = 3
ReDim tmp_arr(Sheets("ark1").Range("B65536").End(xlUp).row - 1) As Integer
'Loads all dates in E row if seach string (txttrailer_reg input) is in column B. If Range("B" & start_row) <> "" Then For row = start_row To Sheets("ark1").Range("B65536").End(xlUp).row If Trim(UCase(Sheets("ark1").Range("B" & row))) = Trim(UCase(txttrailer_reg)) And create_date_from_string(Sheets("ark1").Range("E" & row)) <> False Then tmp_arr(count) = row count = count + 1 End If Next End If
If count = 0 Then Label1 = "Reg. nr. ikke fundet" Exit Sub End If
Dim t As Integer, i As Integer, latest_date_index As Integer
Label1 = "Søgning efter Reg. nr. " & txttrailer_reg
'Sorts the tmp_arr into the row_arr For t = 0 To count - 1 latest_date_index = 0 For i = 0 To count - 1 If tmp_arr(i) <> 0 Then If tmp_arr(latest_date_index) = 0 Then latest_date_index = i End If If create_date_from_string(Sheets("ark1").Range("E" & tmp_arr(i))) > create_date_from_string(Sheets("ark1").Range("E" & tmp_arr(latest_date_index))) Then latest_date_index = i End If End If Next Label1 = Label1 & Chr(10) & Range("B" & tmp_arr(latest_date_index)) & " - " & Range("E" & tmp_arr(latest_date_index)) tmp_arr(latest_date_index) = 0 Next End Sub
Function create_date_from_string(date_String) As Variant date_String = Trim(date_String)
create_date_from_string = True If Len(Trim(date_String)) <> 10 Then create_date_from_string = False End If
'Days If IsNumeric(Mid(Trim(date_String), 1, 2)) Then If Mid(Trim(date_String), 1, 2) < 0 Or Mid(Trim(date_String), 1, 2) > 31 Then create_date_from_string = False End If Else create_date_from_string = False End If
'Months If IsNumeric(Mid(Trim(date_String), 4, 2)) Then If Mid(Trim(date_String), 4, 2) < 0 Or Mid(Trim(date_String), 4, 2) > 12 Then create_date_from_string = False End If Else create_date_from_string = False End If
'Years If Not IsNumeric(Mid(Trim(date_String), 7, 4)) Then create_date_from_string = False End If
If create_date_from_string Then create_date_from_string = Mid(Trim(date_String), 7, 4) & "-" & Mid(Trim(date_String), 4, 2) & "-" & Mid(Trim(date_String), 1, 2) End If End Function
Well done - din funktion ser ud til at gøre arbejdet. Når jeg udskriver label1 i en msgbox, så kommer datoen i den rigtige rækkefølge. Nu mangler jeg blot at få den til at udskrive søgeresultatet i formen. Har du et forslag til hvorledes man kan gøre det? Det skal helst være således at hvergang man trykker søg, så kommer en ny dato, når den har nået den ældste dato, så skal den starte forfra - dvs. køre i ring.
mvh. / Hubertus
Synes godt om
Slettet bruger
03. august 2006 - 14:48#29
Hej igen..
Prøv med dette her - undskyld den lange svartid..
/1.
Private date_index As Integer Private Sub cmdSøg_Click() If txttrailer_reg = "" Then Label1 = "Ugyldigt Reg. nr." txttrailer_reg.SetFocus Exit Sub End If
Dim row As Integer, date_String As String, tmp_arr() As Integer, count As Integer, start_row As Integer start_row = 3
ReDim tmp_arr(Sheets("ark1").Range("B65536").End(xlUp).row - 1) As Integer
'Loads all dates in E row if seach string (txttrailer_reg input) is in column B. If Range("B" & start_row) <> "" Then For row = start_row To Sheets("ark1").Range("B65536").End(xlUp).row If Trim(UCase(Sheets("ark1").Range("B" & row))) = Trim(UCase(txttrailer_reg)) Then If create_date_from_string(Sheets("ark1").Range("E" & row)) <> False Then tmp_arr(count) = row count = count + 1 End If End If Next End If
If count = 0 Then Label1 = "Reg. nr. ikke fundet" Exit Sub End If
Dim row_arr() As Integer, t As Integer, i As Integer, latest_date_index As Integer
'Sorts the tmp_arr into the row_arr ReDim row_arr(count - 1) For t = 0 To count - 1 latest_date_index = 0 For i = 0 To count - 1 If tmp_arr(i) <> 0 Then If tmp_arr(latest_date_index) = 0 Then latest_date_index = i End If If create_date_from_string(Sheets("ark1").Range("E" & tmp_arr(i))) > create_date_from_string(Sheets("ark1").Range("E" & tmp_arr(latest_date_index))) Then latest_date_index = i End If End If Next row_arr(t) = tmp_arr(latest_date_index) tmp_arr(latest_date_index) = 0 Next
'Outputs the [n] newest date where [n] increases for each search. Label1 = Sheets("ark1").Range("E" & row_arr(date_index))
If date_index <> count - 1 Then date_index = date_index + 1 Else date_index = 0 End If End Sub Private Sub txttrailer_reg_Change() date_index = 0 End Sub
Hejsa Jeg kan ikke få dine ændringer til at virke. Hvis jeg sætter en msgbox på label1, så kan jeg se, at den indeholder datoerne i den korrekte rækkefølge. Men jeg skulle gerne have et rækkenummer på de linier, hvor datoerne står (altså i sorteret rækkefølge) så jeg kan få resultatet af søgningen ind i min userform. jeg har en rutine Sub read_data(mlrowdisplayed) txtModtaget_i_by.Text = Cells(mlrowdisplayed, 3) ' row,col TxtVognmand.Text = Cells(mlrowdisplayed, 4) txtStartDato.Text = Cells(mlrowdisplayed, 5) txtLevering_i_by.Text = Cells(mlrowdisplayed, 6) txtSlutdato.Text = Cells(mlrowdisplayed, 7) TxtBemærkninger.Text = Cells(mlrowdisplayed, 8) End Sub
som jeg bruger til at indlæse de søgte data i userformen. Denne rutine bruger en variabel: mlrowdisplayed, som er rækkenummeret for den linie hvor det søgte bilnummer står. kan du få rækkenummert lagt ind i denne variabel, således at jeg får den nyeste dato først osv.
mvh. / hubertus
Synes godt om
Slettet bruger
04. august 2006 - 08:43#31
Dette skulle gøre det /1.
Private date_index As Integer Private Sub cmdSøg_Click() If txttrailer_reg = "" Then Label1 = "Ugyldigt Reg. nr." txttrailer_reg.SetFocus Exit Sub End If
Dim row As Integer, date_String As String, tmp_arr() As Integer, count As Integer, start_row As Integer start_row = 3
ReDim tmp_arr(Sheets("ark1").Range("B65536").End(xlUp).row - 1) As Integer
'Loads all dates in E row if seach string (txttrailer_reg input) is in column B. If Range("B" & start_row) <> "" Then For row = start_row To Sheets("ark1").Range("B65536").End(xlUp).row If Trim(UCase(Sheets("ark1").Range("B" & row))) = Trim(UCase(txttrailer_reg)) Then If create_date_from_string(Sheets("ark1").Range("E" & row)) <> False Then tmp_arr(count) = row count = count + 1 End If End If Next End If
If count = 0 Then Label1 = "Reg. nr. ikke fundet" Exit Sub End If
Dim row_arr() As Integer, t As Integer, i As Integer, latest_date_index As Integer
'Sorts the tmp_arr into the row_arr ReDim row_arr(count - 1) For t = 0 To count - 1 latest_date_index = 0 For i = 0 To count - 1 If tmp_arr(i) <> 0 Then If tmp_arr(latest_date_index) = 0 Then latest_date_index = i End If If create_date_from_string(Sheets("ark1").Range("E" & tmp_arr(i))) > create_date_from_string(Sheets("ark1").Range("E" & tmp_arr(latest_date_index))) Then latest_date_index = i End If End If Next row_arr(t) = tmp_arr(latest_date_index) tmp_arr(latest_date_index) = 0 Next
'Outputs the [n] newest date where [n] increases for each search. Label1 = Sheets("ark1").Range("E" & row_arr(date_index)) read_data(row_arr(date_index))
If date_index <> count - 1 Then date_index = date_index + 1 Else date_index = 0 End If End Sub Private Sub txttrailer_reg_Change() date_index = 0 End Sub
Du har ret - din ændring løste problemet :-) Det var præcis det jeg havde brug for.
smider du et svar, så du kan få dine point.
mvh. Hubertus
ps. tusinde tak for hjælpen. Det har været et godt forløb, hvor jeg har lært en del om måden at håndtere et array på - tak for det.
Synes godt om
Slettet bruger
06. august 2006 - 10:43#33
Velbekommen. og her er et svar.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.