Bug prilikom lijepljenja provjere valjanosti u VBA - Excel savjeti

Sadržaj

Ako ste pročitali prvih nekoliko poglavlja VBA i makronaredbi za Microsoft Excel, znate da se žalim da Excel makro snimač ne obavlja najbolji posao snimanja korisnog koda. Kôd obično radi u redu, ali snima se na takav način da možda nije toliko koristan za skupove podataka različite veličine. Kôd će možda danas dobro funkcionirati, ali sutra neće.

Naišao sam na stvarno čudan problem gdje je makro snimač zapravo snimao kôd koji nije radio. Pisao sam makronaredbu koja je pokušala kopirati provjeru valjanosti iz jedne ćelije u niz ćelija. U programu Excel 2002 ovaj je kod bio sljedeći:

Range(“E5”).Copy Range(“E6:E12”).PasteSpecial Paste:=xlPasteValidation

Ovaj je kod dobro funkcionirao u programu Excel 2002, ali nije uspio na klijentskom stroju s programom Excel 2000. Jedno od starih računala u uredu još uvijek ima Excel 2000, pa sam tamo isprobao kod. Problem je bio s xlPasteValidation. Kad god naletim na nešto neobično, pokrećem snimač makronaredbi kako bih vidio kako će snimač makronaredbi snimiti kod. Postavio sam provjeru valjanosti u E5, uključio makro snimač, kopirao E5 i upotrijebio Paste Special - Validation. Nakon zaustavljanja makro snimača, primijetio sam da je Excel 2000 konstantu zabilježio kao:

Range(“E6:E12”).PasteSpecial Paste:=xlDataValidation

Dakle, otišao sam u klijentsku aplikaciju, promijenio kôd u xlDataValidation i ponovno ga pokrenuo. Čudno, proizvela je istu pogrešku!

Ispostavilo se da makro snimač Excel 2000 zapravo ima grešku. Zabilježit će konstantu xlDataValidation, ali tumač makronaredbi neće prepoznati ni xlDataValidation ni xlPasteValidation. Excel VBA pomoć u programu Excel 2000 pretvara se da ne postoji način da se zalijepe samo provjere valjanosti.

Da bi ovo uspjelo, morate otkriti temeljnu vrijednost xlPasteValidation. Na svom uređaju XL2002 otišao sam u VBA Editor. Upišite Ctrl + G da biste otvorili neposredni prozor i unesite ovo u neposredno okno:

Print xlPasteValidation

Pritisnite Enter i Excel 2002 će vam reći da je xlPasteValidation prijateljski način da kažete "6". Natrag na stroju Excel 2000 isprobao sam ovaj kod:

Range(“E6:E12”).PasteSpecial Paste:=6

Srećom, djeluje. Zapravo ste prisiljeni koristiti temeljnu vrijednost umjesto konstante. Upozoravam na ovu praksu u knjizi, jer čini program zaista teškim za čitanje sljedećoj osobi koja gleda kod. U ovom konkretnom slučaju stvarno nemate izbora. Dodajte komentar koji objašnjava zašto ste ga kodirali na ovaj način:

‘Bug in XL2000; need to use “6” instead of the constant Range(“E6:E12”).PasteSpecial Paste:=6

Dakle - mala je lekcija vrlo specifičan problem kako zalijepiti posebnu provjeru valjanosti u programu Excel 2000, ali veća lekcija je detektivski rad potreban da bi se utvrdilo što se događa kad se u programu Excel VBA dogodi nešto neobično.

Zanimljivi članci...