Chyba pri vkladaní overovania vo VBA - tipy v programe Excel

Obsah

Ak ste si prečítali prvých pár kapitol VBA a makier pre program Microsoft Excel, viete, že sa sťažujem, že záznamník makier programu Excel nerobí najväčšiu prácu so zaznamenávaním použiteľného kódu. Kód zvyčajne funguje dobre, ale je zaznamenaný takým spôsobom, že to nemusí byť až také užitočné pre súbory údajov rôznej veľkosti. Tento kód by dnes mohol fungovať dobre, ale zajtra už nie.

Narazil som na skutočne zvláštny problém, keď záznamník makier skutočne zaznamenal kód, ktorý nefungoval. Písal som makro, ktoré sa pokúsilo skopírovať overenie z jednej bunky do viacerých buniek. V programe Excel 2002 bol tento kód nasledovný:

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

Tento kód fungoval dobre v programe Excel 2002, ale zlyhal na počítači klienta s programom Excel 2000. Jeden zo starých počítačov v kancelárii má stále program Excel 2000, takže som tam skúsil kód. Problém bol s parametrom xlPasteValidation. Kedykoľvek narazím na niečo neobvyklé, spustím záznamník makier, aby som zistil, ako záznamník makier zaznamená kód. Nastavil som validáciu v E5, zapol som záznamník makier, skopíroval som E5 a použil som Paste Special - Validation. Po zastavení záznamu makra som si všimol, že Excel 2000 zaznamenal konštantu ako:

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

Išiel som teda do klientskej aplikácie, zmenil som kód na xlDataValidation a spustil som ho znova. Je zvláštne, že to spôsobilo rovnakú chybu!

Ukázalo sa, že záznamník makier Excel 2000 má v skutočnosti chybu. Zaznamená konštantu xlDataValidation, ale interpret makra nerozpozná ani xlDataValidation, ani xlPasteValidation. Pomocník programu Excel VBA v programe Excel 2000 sa tvári, že neexistuje spôsob, ako vložiť iba validácie.

Aby to fungovalo, musíte zistiť základnú hodnotu xlPasteValidation. Na svojom stroji XL2002 som prešiel do editora VBA. Stlačením klávesovej skratky Ctrl + G otvorte okamžité okno a zadajte ho do okamžitého panela:

Print xlPasteValidation

Stlačte kláves Enter a program Excel 2002 vám oznámi, že xlPasteValidation je priateľský spôsob, ako povedať „6“. Späť na stroji Excel 2000 som vyskúšal tento kód:

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

Našťastie to funguje. Ste skutočne nútení použiť základnú hodnotu namiesto konštanty. Varujem pred touto praxou uvedenou v knihe, pretože veľmi sťažuje čítanie programu pre ďalšiu osobu, ktorá sa pozerá na kód. V tomto konkrétnom prípade naozaj nemáte na výber. Pridajte komentár s vysvetlením, prečo ste to kódovali takto:

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

Takže - malá lekcia je dnes veľmi špecifickým problémom toho, ako vložiť špeciálne overenie do programu Excel 2000, ale väčšou lekciou je detektívna práca potrebná na zistenie toho, čo sa deje, keď sa v programe Excel VBA stane niečo zvláštne.

Zaujímavé články...