nemohu objevit chybu ve VBA Vyřešeno

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

Moderátor: Mods_senior

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3211
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

nemohu objevit chybu ve VBA

Příspěvekod atari » 21 lis 2010 21:19

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

Reklama
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

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

Příspěvekod navstevnik » 21 lis 2010 23:59

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: 3211
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: nemohu objevit chybu ve VBA

Příspěvekod atari » 22 lis 2010 02:59

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: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: nemohu objevit chybu ve VBA

Příspěvekod navstevnik » 22 lis 2010 11:00

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: 3211
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: nemohu objevit chybu ve VBA

Příspěvekod atari » 22 lis 2010 21:48

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.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů