Visos VBA klaidos nėra lygios. Kai kurie yra rimti, o kai kurie yra mažiau rimti. Nors galite nepaisyti klaidų, kurios, jūsų nuomone, yra nereikšmingos, turite spręsti kitas, rimtesnes klaidas. Kai kuriais atvejais turite nustatyti konkrečią įvykusią klaidą.
Kiekviena klaida turi oficialų numerį. Įvykus klaidai, „Excel“ išsaugo klaidos numerį Error objekte, pavadintame Err. Šio objekto ypatybėje Number yra klaidos numeris, o ypatybėje Aprašymas – klaidos aprašas. Pavyzdžiui, toliau pateiktame teiginyje rodomas klaidos numeris, dvitaškis ir klaidos aprašymas:
MsgBox Err.Number & ": " & Err.Description
Atminkite, kad „Excel“ klaidų pranešimai ne visada yra labai naudingi, bet jūs jau tai žinote.
Toliau pateikta procedūra parodo, kaip nustatyti, kuri klaida įvyko. Tokiu atveju galite saugiai nekreipti dėmesio į klaidas, atsirandančias bandant gauti neteigiamo skaičiaus kvadratinę šaknį (ty 5 klaidą), arba klaidas, atsirandančias bandant gauti neskaitinės reikšmės kvadratinę šaknį (13 klaida).
Kita vertus, turite informuoti vartotoją, jei darbalapis yra apsaugotas, o pasirinkime yra vienas ar daugiau užrakintų langelių. (Priešingu atveju vartotojas gali manyti, kad makrokomanda veikė, nors iš tikrųjų neveikė.) Bandymas įrašyti į užrakintą langelį apsaugotame darbalapyje sukelia 1004 klaidą.
Sub SelectionSqrt()
Pritemdyti langelį kaip diapazoną
Dim ErrMsg As String
Jei TipoPavadinimas(Pasirinkimas) <> "Rangas" Tada išeikite iš sub
Dėl klaidos Eikite į ErrorHandler
Kiekvienai pasirinktai ląstelei
cell.Value = Sqr(cell.Value)
Kita ląstelė
Išeiti iš sub
ErrorHandler:
Pasirinkite Case Err.Number
5 atvejis „Neigiamas skaičius
Tęsti Kitas
13 atvejis „Tipo neatitikimas
Tęsti Kitas
Byla 1004 „Užrakinta kamera, apsaugotas lapas
MsgBox "Ląstelė užrakinta. Bandykite dar kartą.", vbCritical, cell.Adresas
Išeiti iš sub
Kitas atvejis
ErrMsg = Klaida (Err.Number)
MsgBox "ERROR: " & ErrMsg, vbCritical, cell.Address
Išeiti iš sub
Pabaigos pasirinkimas
Pabaigos sub
Kai įvyksta vykdymo klaida, vykdymas pereina prie kodo, prasidedančio ErrorHandler etikete. „Select Case“ struktūra tikrina tris dažniausiai pasitaikančius klaidų skaičius. Jei klaidos numeris yra 5 arba 13, vykdymas atnaujinamas kitame sakinyje. (Kitaip tariant, klaida ignoruojama.) Bet jei klaidos numeris yra 1004, rutina praneša vartotojui ir baigiasi. Paskutinis atvejis, nenumatytų klaidų rinkinys, sulaiko visas kitas klaidas ir rodo tikrąjį klaidos pranešimą.