Formatering
Beskrivelse
Formatering
Alle de kontroller vi sætter på vores formularer har egenskaber der gør at vi kan styre deres layout. Og kombinerer vi det med hændelser på kontrollerne kan vi lave mange interessante ting omkring formatering på formularer:
- Automatisk formatering af tal eller datoer
- Betinget formatering
- Aktivering / deaktivering af knapper
Formatering af tal eller datoer
I VBA findes der en indbygget funktion, der hedder Format, der sjovt nok bruges til at formatere tal, datoer mm.
Syntaksen for funktionen er (du kan se en detaljeret beskrivelse af funktionen i VBA hjælpen):
Format(expression[, format[, firstdayofweek[, firstweekofyear]]]) Og i praksis kan det se sådan her ud:
lblDato.Caption = Format(txtDato.Value,"dd/mm/yyyy") lblTal.Caption = Format(txtTal.Value, "###,##0.00") Betinget formatering
Ved at bruge hændelsen VedAktuel på en formular kan vi skrive en stump kode, der vil blive kørt hver gang man skifter post i formularen. Det kan blandt andet bruges til at lave betinget formatering på felter.
Tekstfelter har f.eks. en egenskab der hedder "Backcolor" der kan bruges til at sætte baggrundsfarven på feltet og sammen med en enkelt if sætning kan man lave betinget formatering.
Det enkelte felt har også en hændelse, der hedder FokusVæk, der kan bruges til det samme.
Aktivering af knapper
Alle kontroller har egenskaben Enabled, der styrer om man kan klikke på dem eller ej.
Med nedenstående egenskaber kan man styre navigationsknapper på formularen:
NewRecord
CurrentRecord Øvelse
Disse øvelser kan du lave i databasen, som du kan hente her.
Simpel formateringsformular
Lav nedenstående formular og sørg for at den virker efter hensigten!

Formatering i salgsdatabase
Sørg for at feltet KøbIalt på formularen i kundekartoteket får rød baggrund, hvis beløbet er under 100.000 ellers skal baggrunden være grøn.

Farven skal opdateres hver gang der skiftes post.
Tilføj et ekstra felt i databasen og på formularen, der kan hedde "Oprettet Dato" og skriv en hændelsesprocedure, der sørger for at skrive dagsdato i feltet, hvis man dobbeltklikker på feltet (og der ikke står en dato i forvejen)
Navigations knapper
Tilføj dine egne navigationsknapper på formularen - og sørg for at de kun er aktive, hvis det giver mening at trykke på dem.
Pak databasen sammen eller omdøb den og send den til mig.
Løsning
Jeg har driblet et forslag til løsningen sammen og du kan downloade her.
Formaterings formularen
På formaterings formularen har jeg følgende eventhandlere:
Private Sub cmdDato1_Click() If IsDate(txtDato.Value) Then lblDato.Caption = Format(txtDato.Value, "dd.mm.yyyy") Else lblDato.Caption = "Du har ikke skrevet en dato - prøv igen" End If End Sub Private Sub cmdDato2_Click() If IsDate(txtDato.Value) Then lblDato.Caption = Format(txtDato.Value, "dd. mmmm yyyy") Else lblDato.Caption = "Du har ikke skrevet en dato - prøv igen" End If End Sub Private Sub cmdTal1_Click() If IsNumeric(txtTal.Value) Then lblTal.Caption = Format(txtTal.Value, "###,##0.00") Else lblTal.Caption = "Du har ikke skrevet et tal - prøv igen" End If End Sub Private Sub cmdTal2_Click() If IsNumeric(txtTal.Value) Then lblTal.Caption = Format(txtTal.Value, "###,##0") Else lblTal.Caption = "Du har ikke skrevet et tal - prøv igen" End If End Sub Kunde formularen
Og kunde formularen har følgende eventhandlere:
Private Sub cmdNæste_Click() DoCmd.GoToRecord , , acNext End Sub Private Sub cmdForrige_Click() DoCmd.GoToRecord , , acPrevious End Sub Private Sub Form_Current() If NewRecord Then cmdNæste.Enabled = False Else cmdNæste.Enabled = True End If ' Kan også skrives cmdNæste.Enabled = Not NewRecord If CurrentRecord = 1 Then cmdForrige.Enabled = False Else cmdForrige.Enabled = True End If ' Kan også skrives cmdForrige.Enabled = (CurrentRecord > 1) If KøbIalt.Value < 100000 Then KøbIalt.BackColor = RGB(255, 0, 0) Else KøbIalt.BackColor = RGB(255, 255, 255) End If End Sub Private Sub KøbIalt_BeforeUpdate(Cancel As Integer) If KøbIalt.Value < 100000 Then KøbIalt.BackColor = RGB(255, 0, 0) Else KøbIalt.BackColor = RGB(255, 255, 255) End If End Sub Private Sub OprettetDato_DblClick(Cancel As Integer) If Not IsDate(OprettetDato.Value) Then OprettetDato.Value = Date End If End Sub Brug for hjælp til VBA, VSTO eller SQL?
Scient Data tilbyder professionel IT-konsulentbistand
Kontakt Scient Data →