Törölt nick Creative Commons License 2013.10.26 0 0 22776

 Elöljáróban annyit, hogy:

- Azt mondod, ez egy leegyszerűsített kód, ami nyilván azt jelenti, hogy nem látjuk a lényegi funkciót. Ha látnánk, akkor talán tudnánk egyszerűbb, jobb módszert javasolni, így azonban csak az eredetileg megkezdett irányba tartó utat tudjuk kiegyenesíteni. Ha az eleve rossz, úgy is marad, hiába igyekszünk.

- Elhangzott itt már több megoldásféle, amiket én nem próbáltam, de a beküldők bizonyára igen, és valószínűleg működnek. Ezért nekem most nem az a célom, hogy elmondjam a tuti módszert, hanem csak két hibás gyakorlatra hívnám fel a figyelmed.

 

Az egyik ez:

Range(c.Address).Select

 

Helyette így kellene (ha már szelektálni akarsz):

c.Select

 

Mert ugye a Select ebben az esetben a Range típusú objektum metódusa, tehát direktben ki lehet adni. A Te verziód először előállítja a c tartomány címét, aztán azt konvertálja vissza tartománnyá. Olyan, mintha egy számot először megszoroznál 6-tal, aztán elosztanád 2-vel, aztán elosztanád 3-mal, hogy elvégezhesd rajta a tulajdonképpeni műveletet.

 

 

A másik a Select használata, ami az esetek döntő többségében tök fölösleges, csak mindenki azért használja, mert a makrórögzítőből ez jön ki. (Ahogy Fferi is mondta.)

Valójában a Select használata pont olyan redundáns, mint a *6/2/3 a fenti példában. Aktiválsz egy cellát pusztán azért, hogy aztán az aktív cellán hajthass végre egy műveletet. Nem lenne egyszerűbb eleve az adott cellán végrehajtani azt a műveletet?

 

Range(c.Address).Select
arrIndex(arrIndexAdress) = ActiveCell.Row

 

helyett

 

arrIndex(arrIndexAdress) = Range(c.Address).Row

 

volna helyesebb, és beépítve az első észrevételemet, így volna a legjobb:

 

arrIndex(arrIndexAdress) = c.Row

 

Ismétlem, ez nem válasz a kérdésedre, hanem két kódolási típushibának a kijavítása.

 

A kérdésedre azt mondanám, hogy van a kódodban egy algoritmushiba is. A FindNext utasításnak közvetlenül a Loop While előtt kellene lennie. A jelenlegi formában az első találat feldolgozása kimarad, ehelyett rögtön ugrik a második találatra, és az elsőt csak akkor dolgozza fel, amikor újra megtalálta. Pedig akkor már nem kellene.

Előzmény: Törölt nick (22769)