Virhe liitettäessä validointia VBA: ssa - Excel-vinkkejä

Sisällysluettelo

Jos olet lukenut Microsoft Excelin VBA: n ja makrojen muutaman ensimmäisen luvun, tiedät valitettavan, että Excel-makrotallennin ei tee suurinta työtä käyttökoodin tallentamisessa. Yleensä koodi toimii hyvin, mutta se tallennetaan siten, että se ei ehkä ole niin hyödyllinen erikokoisille aineistoille. Koodi saattaa toimia hyvin tänään, mutta ei huomenna.

Törmäsin todella outoon ongelmaan, jossa makron tallennin tosiasiallisesti nauhoitti koodia, joka ei toiminut Kirjoitin makroa, joka yritti kopioida validoinnin yhdestä solusta solualueelle. Excel 2002: ssa tämä koodi oli seuraava:

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

Tämä koodi toimi hyvin Excel 2002: ssä, mutta epäonnistui asiakkaan koneessa Excel 2000: n kanssa. Toisessa toimiston vanhassa tietokoneessa on edelleen Excel 2000, joten yritin koodia siellä. Ongelma oli xlPasteValidationissa. Aina kun törmään johonkin epätavalliseen, käynnistän makrotallentimen nähdäksesi, kuinka makrotallennin nauhoittaa koodin. Asensin validoinnin E5: ssä, käynnistäin makrotallentimen, kopioin E5: n ja käytin Paste Special - Validation -toimintoa. Kun makrotallennin oli pysäytetty, huomasin, että Excel 2000 kirjasi vakion seuraavasti:

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

Joten menin asiakassovellukseen, muutin koodiksi xlDataValidation ja suoritin sen uudelleen. Outoa, että se tuotti saman virheen!

Osoittautuu, että Excel 2000 -makrotallentimessa on todella vika. Se tallentaa xlDataValidation-vakion, mutta makrotulkki ei tunnista xlDataValidation eikä xlPasteValidation. Excel 2000: n Excel VBA -ohje teeskentelee, ettei vain validointeja voida liittää.

Jotta tämä toimisi, sinun on löydettävä xlPasteValidation -arvo. XL2002-koneellani menin VBA Editoriin. Kirjoita Ctrl + G avataksesi välittömän ikkunan ja kirjoita tämä välittömään ruutuun:

Print xlPasteValidation

Paina Enter ja Excel 2002 kertoo, että xlPasteValidation on ystävällinen tapa sanoa "6". Palasin Excel 2000 -laitteeseen ja yritin tätä koodia:

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

Onneksi se toimii. Olet tosiasiassa pakko käyttää taustalla olevaa arvoa vakion sijaan. Varoitan tätä käytäntöä kirjassa, koska se tekee ohjelmasta todella vaikea lukea koodia seuraavalle seuraavalle henkilölle. Tässä nimenomaisessa tapauksessa sinulla ei todellakaan ole muuta vaihtoehtoa. Lisää kommentti, jossa kerrot, miksi koodoit sen tällä tavalla:

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

Joten - pieni oppitunti on nykyään hyvin erityinen ongelma erityisvalidoinnin liittämisestä Excel 2000: een, mutta isompi oppitunti on etsivä työ, jota tarvitaan selvittämään, mitä tapahtuu, kun jotain outoa tapahtuu Excel VBA: ssa.

Mielenkiintoisia artikkeleita...