Stránka 1 z 1

nemohu objevit chybu ve VBA

Napsal: 21 lis 2010 21:19
od atari
Tento kód funguje (natvrdo zde přepínám listy dle potřeby):

Kód: Vybrat vše

Sub Makro()
Worksheets("7").Select
i = 18
Call zjisti_poradi
End Sub

Sub zjisti_poradi()
a = Cells(i, 2)
Worksheets("vysl").Select
poradi_v_kole = WorksheetFunction.Match(a, Range(Cells(2, i), Cells(21, i)), 0)
Worksheets("7").Select
End Sub

Ale když to přepínání vypnu a vložím ten název listu před Range, tak to přestane fungovat a hlácí to chybu: Run-time error 1004, Application-defined or object-defined error.
Ví někdo proč?

Kód: Vybrat vše

Sub Makro()
Worksheets("7").Select
i = 18
Call zjisti_poradi
End Sub

Sub zjisti_poradi()
a = Cells(i , 2)
poradi_v_kole = WorksheetFunction.Match(a, Worksheets("vysl").Range(Cells(2, i ), Cells(21, i )), 0)
End Sub

Re: nemohu objevit chybu ve VBA  Vyřešeno

Napsal: 21 lis 2010 23:59
od navstevnik
V prvem pripade vlastnost Range i Cells prislusi shodnemu objektu - aktivni list vysl
Ve druhem pripade vsak vlastnost Range patri do objektu list vysl, zatimco vlastnost Cells stale zustava prirazena aktivnimu listu 7 a vysledkem je chyba Run-time error 1004, Application-defined or object-defined error.

i je deklarovana v modulu
Mozne reseni pro druhy pripad:

Kód: Vybrat vše

poradi_v_kole = WorksheetFunction.Match(a, Worksheets("vysl").Range(Cells(2, i).Address, Cells(21, i).Address), 0)

nebo (muzes pouzit i prikaz With Worksheets("vysl") ... End With)

Kód: Vybrat vše

poradi_v_kole = WorksheetFunction.Match(a, Worksheets("vysl").Range(Worksheets("vysl").Cells(2, i), Worksheets("vysl").Cells(21, i)), 0)

radeji pouzij toto:

Kód: Vybrat vše

poradi_v_kole = WorksheetFunction.Match(a, Worksheets("vysl").Range("A2:A21").Offset(0, i - 1), 0)

Re: nemohu objevit chybu ve VBA

Napsal: 22 lis 2010 02:59
od atari
Tak to by mě nenapadlo ani ve snu jaká je příčina. To jsem se to v té mé chytré knížce nedočetl, že vlastnost Cells zůstává u aktivního sešitu. (Asi zas tak chytrá nebude... :smile:) Příště budu chytřejší :D . Jelikož ve skutečnosti mám ten zápis objektu Cells složitější než jsem uvedl, tak jsem použil tu variantu s funkcí "Offset". Je to jednodušší zápis.
Velmi děkuji za rychlou pomoc.

Re: nemohu objevit chybu ve VBA

Napsal: 22 lis 2010 11:00
od navstevnik
Mozna jsem to nenapsal dost jasne nebo si to spatne vykladas, vlastnost Cells je samozrejme vlastnosti prislusneho objektu jak je uvedeno ve tve prirucce. Jen je rozdil v zapisu: Cells(1,1) versus Worksheets("list").Cells(1,1)
V predlozenem pripadu zustava tato vlastnost vlastnosti zrovna aktivniho listu proto, ze neni vlastnosti jineho objektu - rozdil mezi zapisem Cells(1,1) - vlastnost prave a jen prave aktivniho listu a Worksheets("list").Cells(1,1) - vlastnost listu List, je snad zrejmy.

Re: nemohu objevit chybu ve VBA

Napsal: 22 lis 2010 21:48
od atari
Já jsem myslel, že když napíšu Worksheets("2").Range(Cells(1, 1)), tak ta vlastnost Cells je se bude týkat listu "2". Moc tomu nerozumím, budu to muset asi trochu více nastudovat :? . Takže díky.