nemohu objevit chybu ve VBA

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Zamčeno
Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3377
Registrován: 24 říj 2008 19:50

nemohu objevit chybu ve VBA

Příspěvek 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
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: 29 srp 2008 16:49

Re: nemohu objevit chybu ve VBA

Příspěvek 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)
Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3377
Registrován: 24 říj 2008 19:50

Re: nemohu objevit chybu ve VBA

Příspěvek 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.
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: 29 srp 2008 16:49

Re: nemohu objevit chybu ve VBA

Příspěvek 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.
Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3377
Registrován: 24 říj 2008 19:50

Re: nemohu objevit chybu ve VBA

Příspěvek 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.
Zamčeno

Zpět na „Kancelářské balíky“