Formularer og dialogbokse med Excel VBA
Når man laver makroer i Excel, kan man have brug for input fra brugeren. Hvis det f.eks. bare er en talværdi, en tekst eller markering af en celle, kan man bruge Excels indbyggede Inputbox, men er det mere komplekse sager, må man designe sine egne formularer (Userforms).
Først lige et par eksempler på hvordan man kan bruge Excels indbyggede Inputbox.
Sub BedOmEtTal()
Dim vInput
Dim bTal As Boolean
On Error GoTo ErrorHandle:
Do Until bTal = True
vInput = InputBox("Skriv et tal:")
If IsNumeric(vInput) Then bTal = True
Loop
Range("A1").Value = vInput * 2
Exit Sub
ErrorHandle:
MsgBox Err.Description & " Procedure BedOmEtTal"
End Sub
Sub VaelgCelleEllerOmraade()
Dim rCell As Range
On Error Resume Next
Worksheets(1).Activate
Set rCell = Application.InputBox( _
prompt:="Vælg en celle eller et område", Type:=8)
MsgBox "Du valgte " & rCell.Address
Set rCell = Nothing
End Sub
Egne formularer
Til mere komplekse opgaver må man designe sine egne formularer eller dialogbokse. I VBA-editoren vælger man "Insert" og "Userform". Så har man en blank formular, som man kan udstyre med forskellige kontrolelementer som tekstboxe, checkboxe, lister, kommandoknapper og meget andet.
For at kalde formularen frem skriver man ganske enkelt:
Hvis man altså har givet formularen navnet "MinFormular". Formularen lukkes sædvanligvis, når brugeren klikker på en bestemt kommandoknap (f.eks. "OK" eller CommandButton1), og så skriver man i knappens klik-procedure: "Unload Me". Det ser således ud:
Private Sub CommandButton1_Click()
Unload Me
End Sub
Før man skriver kommandoen "Unload Me", vil man normalt skrive kode, som behandler brugerens input.
Hvis man ønsker, at noget skal ske, når formularen starter op, programmerer man det i formularens Initialize event:
Private Sub UserForm_Initialize()
End Sub
Det kan f.eks. være indlæsning af data fra celler i regnearket.
Formularen og de kontrolelementer, man forsyner den med, har alle en række standard hændelser, som man kan forsyne med kode. Det kan være, hvad der skal gøres, når brugeren klikker på objektet, trykker på en tast og meget andet.
Det kan være et stort arbejde at lave dialogbokse, især hvis de skal bruges af andre end en selv. Brugere er notorisk uforudsigelige, og man skal tage højde for alt det, de kan finde på, så man undgår fejl i afvikling af koden. Det kan f.eks. være, at de indsætter talværdier i stedet for tekst, eller at de laver mellemrum foran indtastningen.
Hvis der er mulighed for fejl, skal brugeren nok finde dem!
Relateret
|