Retro Image Creative Commons License 2013.01.27 0 0 20212

Az egzakt hivatkozás egy cellára így néz ki:

 

Application.Workbooks("munkafüzet neve").Worksheets("munkalap neve").Cells(sor, oszlop)

vagy

Application.Workbooks(1).Worksheets(2).Cells(sor, oszlop)

 

Ebből a kékkel írt rész elhagyható, de ha elhagyod őket, akkor az Excel azzal helyettesíti, amit jónak lát.

Olyannal még nem találkoztam, hogy az Application qualifier elhagyásából probléma lett volna, de a másik kettő fontos, és ha biztos akarsz lenni benne, hogy a hivatkozásod nem téveszt célt, mindig odateszed őket. És ez nem is jelent feltétlenül sokkal több gépelést. Csak egy Worksheet típusú változó kell:

 

Dim ML As Worksheet

Set ML = Application.Workbooks(1).Worksheets(2)

 

és innentől kezdve plusz 3 karakter az egzakt cellahivatkozás:


ML.Cells(sor, oszlop)

 

Javaslom a kódod átalakítását, és szertintem csont nélkül menni fog xl2007-ben is.

 

A másik dolog:

Sorszámmal hivatkozni a munkalapra veszélyesebb, mintha a nevét adnád meg.

Ha névre hivatkozol, és a felhasználó átnevezi a munkalapot, akkor max. hibát dob a makró és leáll.

Ha sorszámra hivatkozol, és a felhasználó egy munkalap-beszúrással átrendezi a képet, akkor a makró esetleg hiba nélkül lefut, és fel sem tűnik senkinek, hogy fontos adatokat írt felül egy másik munkalapon.

 

Ezekre egy lehetséges megoldás, ami munkafüzeten belül viszonylag bolondbiztos:

Nevezd el a cél munkalap A1 celláját pl. "kapocs" néven, és legyen a név munkafüzet hatályú.

Utána akárhogy nevezgeti a felhasználó a munkalapot, azt az Excel névdefiníció automatikusan leköveti, és mindig meg lehet találni a munkalapot így:

Set ML = Range("kapocs").Parent

 

Kivéve, ha a felhasználó törli a munkalapot :o)

Előzmény: pimre (20209)