Klaida įklijuojant patvirtinimą VBA - „Excel“ patarimai

Turinys

Jei perskaitėte pirmuosius „Microsoft Excel“ VBA ir makrokomandų skyrius, žinote, kad skundžiuosi, kad „Excel“ makrokomandos aparatas neatlieka didžiausio naudingo kodo įrašymo darbo. Paprastai kodas veikia gerai, tačiau jis įrašomas taip, kad gali būti ne toks naudingas skirtingų dydžių duomenų rinkiniams. Kodas šiandien gali veikti gerai, bet ne rytoj.

Susidūriau su tikrai keista problema, kai makrofonas įrašė neveikiantį kodą. Rašiau makrokomandą, kuri bandė patvirtinimą iš vienos langelio nukopijuoti į daugybę langelių. Programoje „Excel 2002“ šis kodas buvo toks:

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

Šis kodas puikiai veikė programoje „Excel 2002“, tačiau nepavyko kliento kompiuteryje su programa „Excel 2000.“. Viename iš senų biuro kompiuterių vis dar yra „Excel 2000“, todėl ten išbandžiau kodą. Problema kilo dėl „xlPasteValidation“. Kai tik susiduriu su kažkuo neįprastu, paleidžiu makrokomandą, norėdamas pamatyti, kaip makrofonas įrašys kodą. Aš nustatiau patvirtinimą E5, įjungiau makrokomandos įrašymo įrenginį, nukopijavau E5 ir naudoju „Paste Special - Validation“. Sustabdžius makrokomandą, pastebėjau, kad „Excel 2000“ konstantą įrašė kaip:

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

Taigi, nuėjau į kliento programą, pakeičiau kodą į xlDataValidation ir vėl jį paleidau. Keista, bet tai padarė tą pačią klaidą!

Pasirodo, kad „Excel 2000“ makro įrašymo įrenginyje iš tikrųjų yra klaida. Jis įrašys „xlDataValidation“ konstantą, tačiau makrokomandos vertėjas neatpažins nei „xlDataValidation“, nei „xlPasteValidation“. „Excel VBA“ pagalba programoje „Excel 2000“ apsimeta, kad nėra galimybės įklijuoti tik patvirtinimus.

Kad tai veiktų, turite sužinoti pagrindinę „xlPasteValidation“ vertę. Savo „XL2002“ mašina nuėjau į „VBA“ redaktorių. Įveskite Ctrl + G, kad atidarytumėte tiesioginį langą, ir įveskite tai tiesioginėje srityje:

Print xlPasteValidation

Paspauskite „Enter“ ir „Excel 2002“ pasakys, kad „xlPasteValidation“ yra draugiškas būdas pasakyti „6“. Grįžęs į „Excel 2000“ mašiną, išbandžiau šį kodą:

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

Laimei, tai veikia. Jūs iš tikrųjų esate priversti naudoti pagrindinę vertę, o ne konstantą. Perspėju dėl šios praktikos knygoje, nes tai labai apsunkina programos skaitymą kitam asmeniui, žiūrinčiam į kodą. Šiuo konkrečiu atveju jūs tikrai neturite kito pasirinkimo. Pridėkite komentarą, paaiškindami, kodėl kodavote jį tokiu būdu:

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

Taigi - maža pamoka šiandien yra labai specifinė problema, kaip įklijuoti specialų patvirtinimą į „Excel 2000“, tačiau didesnė pamoka yra detektyvinis darbas, reikalingas norint išsiaiškinti, kas vyksta, kai „Excel VBA“ įvyksta kažkas keisto.

Įdomios straipsniai...