Törölt nick Creative Commons License 2013.02.19 0 0 20467

Azért dobja a 'subscript out of range' hibaüzenetet, mert olyan munkalapra hivatkozik, aminek a neve egy üres string (szöveges változó), tehát egy üres cella tartalma a G oszlopban. Esetleg bele lehet tenni egy ha függvényt, hogy ne másoljon, ha a G oszlopban levő cella üres az adott sorban. Beleírtam a kódrészletbe.

 

Az nem teljesen tiszta nekem, hogy miért nem másol amikor üres a B oszlopban a cella, erre nem tudok mit mondani.

 

A G oszlop másolásához valóban a resize metódussal kell babrálni, ezt is beleírtam. Ha nem stimmel, szólj!

 

For Each Rng In Sheets("leltárlista").Range("G4:G" & Lr)

If Rng.Value <> "" Then _

Sheets(CStr(Rng.Value)).Range("B" & _

Rows.Count).End(xlUp).Offset(1, 0).Resize(, 6).Value = _

Rng.Offset(, -6).Resize(, 6).Value

Next Rng

 

Részletesen elmagyarázva:

- a For..Each ciklus végigmegy a "leltárlista" munkalap G oszlopán a negyedik sortól az Lr-edik sorig.

- az Rng változó mindig az adott cellát jelenti (először G4, majd G5, stb.)

- If Rng.Value <> "" Then Ha a cella nem üres, akkor

- Sheets(CStr(Rng.Value)) a Rng cellában található érték nevével fémjelzett munkalap (a CStr szöveges változót csinál belőle, hogy ne számként értelmezze)

- .Range("B" & Rows.Count).End(xlUp) B oszlop utolsó sorából indulva felfelé haladva az első nem üres cella (pl. B3)

- .Offset(1,0) az eggyel alatta levő cella (pl. B4)

- .Resize(,6) a kijelölés átméretezése egy celláról hat cella szélesre jobbra(tehát pl. B4:G4)

- .Value és ennek az értéke

 

legyen egyenlő ezzel:

Rng.Offset(,-6).Resize(,6).Value magyarán a Rng cellától hattal balra levő cella (a "leltárlista" munkalap G oszlopában van a Rng, mint emlékszünk, tehát pl. G4-ből lesz B4)

átméretezve jobbra hat cella széles területté (pl. B4:G4), és ennek az értéke

 

Remélem segítettem.

Előzmény: KelemenGy (20464)