RSS

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:

'Denne stædige inputbox popper op igen
'og igen, til brugeren skriver en talværdi.
Do Until bTal = True
    vInput = InputBox("Skriv et tal:")
    If IsNumeric(vInput) Then bTal = True
Loop

'Ganger tallet med 2 og skriver facit i celle A1
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

'Beder brugeren markere en celle eller et område.
'Typen 8 fortæller inputboxen, at der er tale om
'et rangeobjekt (celle eller område).
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:

MinFormular.show

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()
   'Aktion - hvad der skal gøres, når
   'formularen starter. Det kan f.eks.
   'være indlæsning af værdier fra et
   'område i regnearket.
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