VBA kode omkring userforms
Det sidste vi mangler at lave omkring userforms er at kode hændelsesprocedurer, så der også kommer til at ske noger når brugeren trykker på knappen.
Hændelsesprocedure til knap
Hvis man dobbeltklikker på en knap i en userform bliver der oprettet en hændelsesprocedure til knappen. Det ser sådan her ud (når knappen hedder opret):
I hændelsesproceduren kan du skrive al den VBA kode du har lyst til. De kontrolelementer der er på userformen er objekter, der kan adresseres med deres navn. Findes der en tekstbox på userformen, der hedder txtNavn kan indholdet trækkes ud og afleveres i dokumentet med koden:
Selection.TypeText txtNavn.Value
Og på samme måde kan man også hente værdier ud af de øvrige kontrolelementer.
Bogmærker
Når vi skal placere tekst fra vores userform i dokumenter er bogmærker et meget centralt emne. Et bogmærke indsættes via "Indsæt" fanen i båndet (Word 2007/2010).
Og det er smart, hvis man kan se sine bogmærker i dokumentet - der skal man lige en tur ind i avancerede indstillinger
Et lille eksempel
Nyttig VBA kode
I relation til placering af indholdet fra en userform i dokumentet er der et par kodelinjer der kan være nyttige
Selection.TypeText txtNavn.Value - skriver indholdet af tekstboksen der hvor courseren står
Selection.TypeParagraph - indsætter et linjeskift i dokumentet
Selection.GoTo What:=wdGoToBookMark, Name:="Bogmærke"
- flytter cursoren til bogmærket med navenet "Bogmærke"
ActiveDocument.Bookmarks("Bogmærke").Range.Text = "Indsat Text"
- indsætter tekst i stedet for bogmærket - og sletter bogmærket!
Det kommer til at se sådan her ud, hvis det kørers på ovenstående eksempel
ActiveDocument.Bookmarks("Bogmærke").Range.InsertBefore "Indsat Text"
og kørt på ovenstående eksempel
ActiveDocument.Bookmarks("Bogmærke").Range.InsertAfter "Indsat Text"
det giver så
Vil man erstatte teksten inde i et bogmærke med en tekst og beholde bogmærket - det gør man sådan her:
Dim bmRange As Range
Set bmRange = ActiveDocument.Bookmarks("Bogmærke").Range
bmRange.Text = "Indsat Text"
ActiveDocument.Bookmarks.Add Name:="Bogmærke", Range:=bmRange
Det giver følgende resultat:
Der skal nok dukke mere VBA kode op senere i kurset.
Hændelsesprocedurer på userformen selv
I toppen af arbejdsvinduet er der to dropdown bokse. Vælger man UserForm i den første kan man vælge forskellige hændelsesprocedurer i den anden.
Initilize hændelsesprocedurern kan bruges til at få kode afviklet når UserFormen bliver vist første gang - det kunne f.eks. være at fylde indhold på en dropdownkontrol. Det kunne se sådan her ud (forudsat dropdownkontrollen hedder cboTitel)
Private Sub UserForm_Initialize()
cboTitel.AddItem "Vælg titel"
cboTitel.AddItem "Hr."
cboTitel.AddItem "Fru"
cboTitel.ListIndex = 0
End Sub
Hændelsesprocedurer på de øvrige kontrolelementer (datavalidering)
De enkelte kontrolelementer har også hændelsesprocedurer, der f.eks. kan bruges til at validere de data brugeren indtaster/vælger. Vælg kontrollen i venstre dropdownkontrol og Exit i den højre - så får du den viste hændelsesprocedure:
Bemærk, at der overføres en parameter Cancel, der kan bruges til at styre om brugeren må komme videre. Det kan bruges til validering - det kunne se sådan her ud:
Private Sub txtAntal_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsNumeric(txtAntal.Value) Then
MsgBox "Her skal du skrive et tal"
Cancel = True
End If
End Sub