Bug bij het plakken van validatie in VBA - Excel-tips

Inhoudsopgave

Als je de eerste paar hoofdstukken van VBA & Macro's voor Microsoft Excel hebt gelezen, weet je dat ik klaag dat de Excel-macrorecorder niet het beste werk doet bij het opnemen van bruikbare code. Meestal werkt de code prima, maar wordt hij zo vastgelegd dat hij voor datasets van verschillende grootte misschien niet zo handig is. De code werkt misschien prima vandaag, maar niet morgen.

Ik kwam een ​​heel vreemd probleem tegen waarbij de macrorecorder daadwerkelijk code opnam die niet werkte. Ik was een macro aan het schrijven die probeerde de validatie van de ene cel naar een reeks cellen te kopiëren. In Excel 2002 was deze code als volgt:

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

Deze code werkte prima in Excel 2002, maar mislukte op de computer van een klant met Excel 2000. Een van de oude computers op kantoor heeft nog Excel 2000, dus ik heb de code daar geprobeerd. Het probleem was met de xlPasteValidation. Telkens wanneer ik iets ongewoons tegenkom, start ik de macrorecorder om te zien hoe de macrorecorder de code zou opnemen. Ik zette validatie op in E5, zette de macro-recorder aan, kopieerde E5 en gebruikte Plakken speciaal - Validatie. Nadat ik de macrorecorder had gestopt, merkte ik op dat Excel 2000 de constante opnam als:

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

Dus ging ik naar de clienttoepassing, veranderde de code in xlDataValidation en voerde het opnieuw uit. Vreemd genoeg leverde het dezelfde fout op!

Het blijkt dat de Excel 2000-macrorecorder eigenlijk een bug heeft. Het zal de constante xlDataValidation registreren, maar de macro-interpreter herkent xlDataValidation noch xlPasteValidation. Excel VBA Help in Excel 2000 doet alsof er geen manier is om alleen validaties te plakken.

Om dit te laten werken, moet u de onderliggende waarde van xlPasteValidation ontdekken. Op mijn XL2002-machine ging ik naar de VBA-editor. Typ Ctrl + G om het directe venster te openen en typ dit in het directe venster:

Print xlPasteValidation

Druk op enter en Excel 2002 zal je vertellen dat xlPasteValidation een vriendelijke manier is om "6" te zeggen. Terug op de Excel 2000-machine heb ik deze code geprobeerd:

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

Gelukkig werkt het. Je bent eigenlijk gedwongen om de onderliggende waarde te gebruiken in plaats van de constante. Ik waarschuw in het boek voor deze praktijk, omdat het programma hierdoor erg moeilijk leesbaar is voor de volgende persoon die naar de code kijkt. In dit specifieke geval heb je echt geen keus. Voeg een opmerking toe waarin u uitlegt waarom u het op deze manier hebt gecodeerd:

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

Dus de kleine les van vandaag is het zeer specifieke probleem van het plakken van speciale validatie in Excel 2000, maar de grotere les is het speurwerk dat nodig is om erachter te komen wat er gebeurt als er iets vreemds gebeurt in Excel VBA.

Interessante artikelen...