Hiba az érvényesítés beillesztésekor a VBA-ba - Excel tippek

Tartalomjegyzék

Ha elolvasta a VBA és makrók első néhány fejezetét a Microsoft Excel programhoz, akkor tudja, hogy panaszkodom, hogy az Excel makrofelvevő nem a legnagyobb feladatot végzi a használható kód rögzítésében. Általában a kód jól működik, de úgy rögzítik, hogy a különböző méretű adatkészleteknél nem biztos, hogy hasznos. Lehet, hogy a kód ma jól működik, holnap viszont nem.

Egy igazán furcsa problémába ütköztem, amikor a makrofelvevő valóban nem működő kódot rögzített. Írtam egy makrót, amely megpróbálta másolni az érvényesítést egy cellából egy cellatartományba. Az Excel 2002-ben ez a kód a következő volt:

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

Ez a kód jól működött az Excel 2002-ben, de nem sikerült egy kliens gépén az Excel 2000-tel. Az irodában az egyik régi számítógépen még mindig van Excel 2000, ezért ott próbáltam ki a kódot. A probléma az xlPasteValidation-lel volt. Amikor valami szokatlan dologba ütközöm, elindítom a makrórögzítőt, hogy lássam, hogyan rögzíti a makrórögzítő a kódot. Beállítottam az érvényesítést az E5-ben, bekapcsoltam a makrórögzítőt, lemásoltam az E5-öt és a Paste Special - Validation-t használtam. A makrofelvevő leállítása után megjegyeztem, hogy az Excel 2000 az állandót a következőképpen rögzítette:

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

Tehát odamentem az ügyfélalkalmazáshoz, megváltoztattam a kódot xlDataValidation-ra és újra futtattam. Furcsa módon ugyanazt a hibát produkálta!

Kiderült, hogy az Excel 2000 makrofelvevőnél valóban van hiba. Rögzíti az xlDataValidation konstansot, de a makróértelmező nem ismeri fel sem az xlDataValidation, sem az xlPasteValidation értéket. Az Excel VBA súgó az Excel 2000-ben úgy tesz, mintha csak érvényesítéseket nem lehet beilleszteni.

Ahhoz, hogy ez működjön, meg kell fedeznie az xlPasteValidation mögöttes értékét. Az XL2002 gépemen a VBA szerkesztőhöz mentem. Írja be a Ctrl + G billentyűkombinációt az azonnali ablak megnyitásához, majd írja be ezt a közvetlen ablaktáblába:

Print xlPasteValidation

Az Enter billentyű lenyomásával az Excel 2002 megmondja, hogy az xlPasteValidation egy barátságos módszer a „6” kimondására. Visszatérve az Excel 2000 gépre, kipróbáltam ezt a kódot:

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

Szerencsére működik. Kénytelen az állandó érték helyett az alapértéket használni. Figyelmeztetem ezt a gyakorlatot a könyvben, mivel a programot nagyon nehéz elolvasni a következő, a kódot néző ember számára. Ebben a konkrét esetben valóban nincs más választása. Adjon meg megjegyzést, amely elmagyarázza, miért kódolta így:

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

Tehát - a mai kis lecke az a speciális probléma, hogy miként illeszthető be a speciális érvényesítés az Excel 2000-be, de a nagyobb lecke a nyomozói munka, amely annak kiderítéséhez szükséges, hogy mi történik, ha valami furcsa dolog történik az Excel VBA-ban.

érdekes cikkek...