Bug la lipirea validării în VBA - Sfaturi Excel

Cuprins

Dacă ați citit primele câteva capitole din VBA și Macro pentru Microsoft Excel, știți că mă plâng că înregistratorul de macrocomenzi Excel nu face cea mai mare treabă de înregistrare a codului utilizabil. De obicei, codul funcționează bine, dar este înregistrat în așa fel încât să nu fie atât de util pentru seturi de date de dimensiuni diferite. Codul ar putea funcționa bine astăzi, dar nu mâine.

M-am confruntat cu o problemă cu adevărat ciudată în care macro recorderul a înregistrat de fapt cod care nu a funcționat. Scriau o macro care încerca să copieze validarea dintr-o celulă într-o gamă de celule. În Excel 2002, acest cod a fost după cum urmează:

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

Acest cod a funcționat bine în Excel 2002, dar a eșuat pe computerul unui client cu Excel 2000. Unul dintre computerele vechi din birou are încă Excel 2000, așa că am încercat codul acolo. Problema a fost cu xlPasteValidation. Ori de câte ori întâlnesc ceva neobișnuit, pornesc înregistratorul de macro pentru a vedea cum ar putea înregistra codul. Am configurat validarea în E5, am pornit macro recorderul, am copiat E5 și am folosit Paste Special - Validation. După oprirea macro recorderului, am observat că Excel 2000 a înregistrat constanta ca:

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

Așadar, m-am dus la aplicația client, am schimbat codul în xlDataValidation și l-am rulat din nou. În mod ciudat, a produs aceeași eroare!

Se pare că înregistratorul de macrocomenzi Excel 2000 are de fapt o eroare. Va înregistra constanta xlDataValidation, dar interpretul macro nu va recunoaște nici xlDataValidation, nici xlPasteValidation. Ajutorul Excel VBA în Excel 2000 pretinde că nu există nicio modalitate de a lipi doar validări.

Pentru ca acest lucru să funcționeze, trebuie să descoperiți valoarea de bază a xlPasteValidation. Pe mașina mea XL2002, m-am dus la editorul VBA. Tastați Ctrl + G pentru a deschide fereastra imediată și tastați aceasta în panoul imediat:

Print xlPasteValidation

Apăsați Enter și Excel 2002 vă va spune că xlPasteValidation este un mod prietenos de a spune „6”. Înapoi pe mașina Excel 2000, am încercat acest cod:

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

Din fericire, funcționează. Ești de fapt forțat să folosești valoarea de bază în loc de constantă. Avertizez împotriva acestei practici în carte, deoarece îngreunează citirea programului pentru următoarea persoană care se uită la cod. În acest caz special, într-adevăr nu aveți de ales. Adăugați un comentariu explicând de ce l-ați codat astfel:

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

Deci - lecția mică de astăzi este problema foarte specifică a modului de lipire a validării speciale în Excel 2000, dar lecția mai mare este munca de detectiv necesară pentru a afla ce se întâmplă atunci când se întâmplă ceva ciudat în Excel VBA.

Articole interesante...