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)