Makro #7, Excel makro kurs, mer Listbox og feilhåndtering i VBA

with Ingen kommentarer

Feilhåndtering i VBA

I Makro#6 kikket vi på hvordan vi kan bruke Listbox i et skjema. Dere observante brukere har for lengst oppdaget at dette eksemplet ikke er perfekt. Det feiler hvis du ikke klikker i Listboxene i en bestemt rekkefølge, samt hvis du klikker på Navn før du har klikket i begge listboxene.

Feilsituasjon 1 – Når vi klikker på Navn før vi har klikket på Måned.

ListboxFeil2

Når vi klikker på Navn, har vi laget en rutiner som skal finne den verdien som ligger i cellen i kolonne K og linje L. Før vi har klikket på en linje i en Listbox, vil Listindex (linjen som er valgt) være -1. Klikker vi på første linje i Listboxen, får listindex for denne boksen verdien 0. (Her lurer jeg meg selv i videoen :)).

Vi tester på verdien av Listbox1.Listindex med denne linjen

If Listbox1.Listindex>-1 Then

Feilsituasjon 2 – Når vi klikker på OK uten å ha klikket på både Måned og Navn

I dette tilfellet vet vi hvilke feil som kan inntreffe, og kunne ha testet med linjen

If Listbox1.Listindex>-1 And Listbox2.Listindex>-1 Then

Da ville ikke feilsituasjonen oppstått, men brukeren ville heller ikke fått noen beskjed om at det er et problem.

Når det er vanskelig å forutsi hva som kan gå galt.

I andre situasjoner kan det være vanskelig – eller omfattende –  å forutse alle feilsituasjoner som kan oppstå. Da kan vi gi beskjed i VBA om hva som skal skje hvis det oppstår en feil ved å bruke ON ERROR GOTO, f.eks:

On error goto feil

“feil” i dette tilfellet er en label, eller etikett, som vi velger navn på selv. Et annet sted i samme subrutine eller funksjon må du ha satt inn denne labelen slik

feil:

Hvis en feil oppstår, vil programmet hoppe til denne labelen og utføre koden som står under. I vårt eksempel får brukeren beskjed om at Måned og Navn må velges.

I akkurat dette eksemplet kunne jeg valgt en annen løsning, men det er greit å vite om ON ERROR GOTO for generell feilhåndtering.

Last ned regnearket her: Makro06Listbox02.xlsm (97 downloads)