Viga kinnitamise kleepimisel VBA-s - Exceli näpunäited

Lang L: none (table-of-contents)

Kui olete lugenud Microsofti Exceli VBA ja makrode esimesi peatükke, teate, et kurdan, et Exceli makrofoni ei tee kasutatava koodi salvestamisel suurimat tööd. Tavaliselt töötab kood hästi, kuid see on salvestatud nii, et see ei pruugi erineva suurusega andmekogumite jaoks nii kasulik olla. Kood võib täna hästi töötada, kuid mitte homme.

Mul tekkis tõeliselt kummaline probleem, kus makromagnet salvestas tegelikult koodi, mis ei töötanud. Kirjutasin makrot, mis proovis valideerimist kopeerida ühest lahtrist lahtrivahemikku. Excelis 2002 oli see kood järgmine:

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

See kood töötas Excel 2002-s hästi, kuid ebaõnnestus kliendi masinas koos Excel 2000-ga. Kontori ühes vanas arvutis on endiselt Excel 2000, nii et proovisin seal koodi. Probleem oli xlPasteValidation. Alati, kui satun millegi ebatavalise otsa, käivitan makrofoni, et näha, kuidas makrosalvesti koodi salvestab. Seadistasin E5-s valideerimise, lülitasin sisse makrosalvesti, kopeerisin E5 ja kasutasin Paste Special - Validation. Pärast makrofoni peatamist märkisin, et Excel 2000 salvestas konstandi järgmiselt:

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

Niisiis, läksin kliendirakendusse, muutsin koodi xlDataValidationiks ja käivitasin selle uuesti. Kummalisel kombel tekitas see sama vea!

Selgub, et Excel 2000 makrofonil on tegelikult viga. See salvestab xlDataValidationi konstandi, kuid makrotõlk ei tunne ära ei xlDataValidation ega xlPasteValidation. Exceli VBA spikker Excel 2000-s teeb näo, nagu poleks võimalik ainult valideerimisi kleepida.

Selle toimimiseks peate avastama xlPasteValidation põhiväärtuse. Oma XL2002 masinas käisin VBA toimetaja juures. Tippakna avamiseks tippige Ctrl + G ja tippige see otsepaanile:

Print xlPasteValidation

Vajutage sisestusklahvi ja Excel 2002 ütleb teile, et xlPasteValidation on sõbralik viis öelda “6”. Exceli 2000 masinas tagasi proovisin seda koodi:

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

Õnneks see töötab. Te olete tegelikult sunnitud konstandi asemel kasutama aluseks olevat väärtust. Hoiatan raamatus selle tava eest, sest see muudab programmi järgmisele isikule, kes seda koodi vaatab, väga raske lugeda. Sel konkreetsel juhul pole teil tegelikult valikut. Lisage kommentaar, mis selgitab, miks te selle kodeerite:

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

Niisiis - tänane väike õppetund on väga spetsiifiline probleem, kuidas kleepida spetsiaalne valideerimine Excel 2000-sse, kuid suurem õppetükk on detektiivitöö, mis on vajalik selleks, et välja selgitada, mis juhtub, kui Exceli VBA-s juhtub midagi imelikku.

Huvitavad Artiklid...