Včera som sa k ďalšiemu variantu nedostal.
Keď ste ešte len na riadku
Day1 = .Cells(2, 1).Resize(R1).Value2
tak pole nieje naplnené, len je vytvorené, teda má veľkosť
riadky 1-5
stĺpce 1-1
každá hodnota je
Empty (prázdna hodnota)
keď dáte ešte raz F8 a prejdete na ďalší riadok, až potom sa riadok vykoná a pole dostane hodnoty z patričných buniek. Ožltnutý riadok v kóde pri krokovaní je len označenie riadka, ktorý sa
bude najbližšie vykonávať, nieje ešte vykonaný.
Tých podmienok je tam preto toľko, lebo ak je napr meno iba jedno, tak ho Excel do VBA nevráti ako pole 1x1 ale ako jednu hodnotu. Ďalej napr. ak jedno pole je prázdne, tak je zbytočná kontrola, lebo to znamená, že všetky z neprázdneho v prázdnom chýbajú, tak sa iba skopírujú, samozrejme iba v prípade, že nieje prázdne aj jedno aj druhé, a samozrejme s ošetrením ak by to nebolo pole ale iba jedna hodnota (viď vyššie), a kombinácie týchto podmienok. Skoro to isté vypodmienkovanie stavov platí aj pri následnom zápise. A tým sa stáva kód dlhý, a čo je dlhé, je zložité, a čo je zložité je náchylné k chybám.
...
PS: Inak vidíte našiel ste ďalšiu nepresnosť v poznámke:
Day1 = .Cells(2, 1).Resize(R1).Value2 'načítanie mien do poľa Day2
a
Day2 = .Cells(2, 4).Resize(R2).Value2 'načítanie mien do poľa Day2
majú rovnaký popisok, ale samozrejme pri kopírovaní riadkov kde sa mení iba R1 na R2 a Day1 na Day2 som zabudol zmeniť popisok na
'načítanie mien do poľa Day1
v prvom prípade.
EDIT: Inak pre programátora je jedna z najťažších vecí ošetriť všetky možné veci, čo dokáže užívateľ vo svojej vynaliezavosti vyparatiť. Nadáva sa tomu blbuvzdornosť. A je to začarovaný kruh. Preto aj často veľmi zložité veci, ako napr. Windows, majú veľa chýb, lebo ich univerzálnosť tlačí pred sebou nepredstaviteľnú komplikovanosť, previazanosť, závislosť a robustnosť kódov. Vývojári nemajú šancu, ešte že majú užívateľov, ktorý ich upozornia (niekedy aj pár rokov v kuse).
citovat