< návrat zpět

MS Excel


Téma: skrytí vybraných řádků na základě podmínky rss

Zaslal/a 2.2.2014 0:59

Ahoj můžete mi prosím pomoct s makrem, které by sledovalo tři konkrétní buňky např A10:A12 a při změně v nich by se spustilo.

Makro bude skrývat buť řádek 10 nebo 11 nebo 12 na základě toho která z buněk A10:A12 bude prázdná. Pokud bude A10 něco obsahovat bude 10 řádek vidět a tak analogicky u všech tří.

Všem moc děkuji za pomoc.

Ještě jedna otázka nazávěr. Šlo by udělat, aby to makro pracovalo asi na 20-30 listech. Jde nějak hromadně určit pro které listy má to makro platit i s tou automatickou kontrolou změn v buňkách?

Je tu spousta odborníků a já jsem VBA lama tak prosím o radu. 1

Zaslat odpověď >

Strana:  « předchozí  1 2 3 4 5   další »
#017690
avatar
asi se špatně vyjadřuji. Omlouvám se, ale jsem z toho fakt zmatenej. Mám v modulech to co jsem uvedl jako Module1

no a pak do listu jedna a do ostatních kde budu potřebovat to makro spustit chci vložit toto:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then
Call Vymaz
End If
End Sub

jen nevím jak změnit adresu té buňky která je v listu vzorce!B1

aby když budu mít toto:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then
Call Vymaz
End If
End Sub

v listu 1, 5, 12 a 16 například, tak aby to ovlivnilo jen je ten Modul1
Teď už jsem to vysvětlil správně? 7citovat
#017693
avatar

adosl napsal/a:

..., aby se spustilo jen v případě že změním hodnotu v buňce B1 na listu VZORCE.
Šlo by to udělat? ... potřebuji aby se spustilo po změně hodnoty v buňce B1 na listu VZORCE.


Toto splnuje to co jsem napsal.

Nebo napis jeste jednou co tedy vlastne potrebuješ?
- Má se makro provést na všech listech po změně na jednom konkrétním listu?
- nebo kdy se má spustit?
- Klidně by se dalo i při aktivaci daného listu
-- aktivuješ list a na základě nějaké podmínky se řádky buď skryjí nebo zobrazí

Napisto klidně jak kdyby si to popisoval někomu uplně neznalému.

Je vidět že Ti tu radíme každý jinak a stále to není ono 4citovat
#017694
avatar
no to co jsi napsal bylo v podstatě nejblíž tomu co potřebuji. Potřeboval bych když mám list "vzorce" a potom další které mají proměnlivá jména, ale je jich asi 50. Z těch padesáti na určitých vybraných potřebuji aby se skrývaly tři poslední řádky podle vzorce který v nich je. no a abych do těch vzorců nemusel zasahovat tak chci udělat přes makro to co jsem udělal.Mám modul1 toto:
Sub Skryj()

If Range("A1") = "" Then
Rows("1:1").Hidden = True
Else
Rows("1:1").Hidden = False
End If

If Range("A2") = "" Then
Rows("2:2").Hidden = True
Else
Rows("2:2").Hidden = False
End If

If Range("A3") = "" Then
Rows("3:3").Hidden = True
Else
Rows("3:3").Hidden = False
End If

End Sub

to nechci upravovat to zůstane tak jak to je.

No a pak do modulů vybraných listů u kterých je ale proměnlivý název, takže dopředu nedokážu říct jak se bude který list jmenovat potřebuji vložit něco co mi při změně buňky B1 v listu vzorce spustí na tom konkrétním vybraném listu makro Skryj()

takže budu mít modul1 který v sobě má makro Skryj() to jednoduché co jsem napsal. a pak si zvolím modul vybraného listu do kterého potřebuji to co mi pohlídá buňku B1 v listu vzorce a při změně hodnoty v B1 mi spustí makro Skryj.

Snad už jsem to vysvětlil dobře.citovat
#017695
avatar
Pokud se Ti budou měnit názvy listů tak nejlepší bude do modulů listu vložit toto
Private Sub Worksheet_Activate()
Call Skryj
End Sub


Nebo pak už fakt nevím.citovat
icon #017696
eLCHa
Já už rozumím.

Musíte si uvědomit, že ta měněná buňka je na listu "vzorce", takže ta událostní procedura musí být v jeho modulu. Tam tedy umístěte proceduruPrivate Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B1").Address Then
Call Skryj
End If
End Sub
Pokaždé, když změníte hodnotu v buňce B1, se tato procedura spustí a zavolá proceduru Skryj

No a pak do modulů vybraných listů u kterých je ale proměnlivý název, takže dopředu nedokážu říct jak se bude který list jmenovat potřebuji vložit něco co mi při změně buňky B1 v listu vzorce spustí na tom konkrétním vybraném listu makro Skryj()
Nemůžete do jiného listu umístit událostní proceduru hlídající změnu v jiném listu (max do modulu sešitu, ale to by v tomto případě nepomohlo)

Takže musíte proceduře Skryj říct, ve kterých listech má skrývat a ve kterých ne. Tady je více možností, já navrhuji na každém s dotyčných listů definovat vždy stejný název (např.: "Skryj1_3") s platností pouze pro list (tedy "'NazevListu'!Skryj1_3") a pak spustit cyklus s testem na existenci tohoto nazvu na listu. V tomto případěSub Skryj()
Dim sh As Worksheet, r As Range

For Each sh In ThisWorkbook.Sheets
On Error Resume Next

For Each r In sh.Range("Skryj1_3").Rows
r.EntireRow.Hidden = r.Cells(1).Value = ""
Next r

On Error GoTo 0
Next sh

Set r = Nothing
Set sh = Nothing
End Sub

Psáno z brucha, netestováno.

Poznámka: Dělá to to samé, co to vaše původní makro, ale navíc je jedno, kde se v listu oblast "Skryj1_3" nachází a kolik má řádků.citovat
icon #017697
eLCHa
Mimochodem - pokud proceduru Skryj budete volat pouze s jediné procedury v projektu, nemusíte ji mít definovanou zvlášť na modulu, ale můžete rovnou vložit do událostní procedury Change - tedy:Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B1").Address Then
Dim sh As Worksheet, r As Range

For Each sh In ThisWorkbook.Sheets
On Error Resume Next

For Each r In sh.Range("Skryj1_3").Rows
r.EntireRow.Hidden = r.Cells(1).Value = ""
Next r

On Error GoTo 0
Next sh

Set r = Nothing
Set sh = Nothing
End If
End Sub
citovat
#017704
avatar
Pořád mi to nejde asi dělám někde chybu. A jde spustit makro při změně buňkdy ve které je zapsaný vzorec. Ono by to šlo spouštět i nějakou buňkou která je ve stejném listu pokud by se dalo zařídit, aby se makro spustilo po změně buňky ve které je vzorec. např. pokud bych měl na jakémkoliv listu buňku s =vzorce!b1.citovat
#017705
avatar

adosl napsal/a:

Pořád mi to nejde asi dělám někde chybu. A jde spustit makro při změně buňkdy ve které je zapsaný vzorec. Ono by to šlo spouštět i nějakou buňkou která je ve stejném listu pokud by se dalo zařídit, aby se makro spustilo po změně buňky ve které je vzorec. např. pokud bych měl na jakémkoliv listu buňku s =vzorce!b1.

No iba ak by si zmenil ten vzorec.citovat
#017708
avatar
tak to jsem v pasti. Asi udělám tlačítko a bude se to spouštět ručně. To je to čemu jsem se chtěl vyhnout. :(citovat
icon #017710
eLCHa
Bez urážky, ale myslím, že jste jen popletený ;)
Kdyby jste sem dal přílohu, tak už to máte dávno funkční.citovat

Strana:  « předchozí  1 2 3 4 5   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje