Chyba při vkládání ověření ve VBA - tipy pro Excel

Obsah

Pokud jste si přečetli prvních několik kapitol VBA a maker pro Microsoft Excel, víte, že si stěžuji, že záznamník maker aplikace Excel nedělá největší práci se záznamem použitelného kódu. Kód obvykle funguje dobře, ale je zaznamenán takovým způsobem, že to nemusí být užitečné pro datové sady různých velikostí. Kód může fungovat dobře dnes, ale ne zítra.

Narazil jsem na opravdu podivný problém, kdy záznamník maker ve skutečnosti zaznamenal kód, který nefungoval. Psal jsem makro, které se pokusilo zkopírovat ověření z jedné buňky do řady buněk. V aplikaci Excel 2002 byl tento kód následující:

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

Tento kód fungoval dobře v aplikaci Excel 2002, ale selhal na klientském počítači s aplikací Excel 2000. Jeden ze starých počítačů v kanceláři má stále aplikaci Excel 2000, takže jsem tam zkusil kód. Problém byl s xlPasteValidation. Kdykoli narazím na něco neobvyklého, spustím záznam makra, abych zjistil, jak záznam makra zaznamená kód. Nastavil jsem validaci v E5, zapnul záznamník maker, zkopíroval E5 a použil Paste Special - Validation. Po zastavení záznamu makra jsem si všiml, že Excel 2000 zaznamenal konstantu jako:

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

Takže jsem šel do klientské aplikace, změnil kód na xlDataValidation a znovu jej spustil. Kupodivu to způsobilo stejnou chybu!

Ukázalo se, že záznamník maker aplikace Excel 2000 má ve skutečnosti chybu. Zaznamená konstantu xlDataValidation, ale interpret makra nerozpozná ani xlDataValidation, ani xlPasteValidation. Nápověda aplikace Excel VBA v aplikaci Excel 2000 předstírá, že neexistuje způsob, jak vložit pouze ověření.

Aby to fungovalo, musíte zjistit základní hodnotu xlPasteValidation. Na mém stroji XL2002 jsem přešel do editoru VBA. Zadejte Ctrl + G pro otevření okamžitého okna a zadejte toto do okamžitého podokna:

Print xlPasteValidation

Stiskněte klávesu Enter a Excel 2002 vám řekne, že xlPasteValidation je přátelský způsob, jak říci „6“. Zpět na stroji Excel 2000 jsem vyzkoušel tento kód:

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

Naštěstí to funguje. Ve skutečnosti jste nuceni použít místo konstanty podkladovou hodnotu. Varuji před touto praxí v knize, protože díky ní je program opravdu těžko čitelný pro další osobu, která se dívá na kód. V tomto konkrétním případě opravdu nemáte na výběr. Přidejte komentář s vysvětlením, proč jste to kódovali takto:

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

Takže - malá lekce je dnes velmi specifickým problémem, jak vložit speciální ověření do aplikace Excel 2000, ale větší lekcí je detektivní práce potřebná k zjištění, co se děje, když se v aplikaci Excel VBA stane něco zvláštního.

Zajímavé články...