IT Fjernundervisning

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 →