< 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ší »
#017732
avatar
@eLCHa
ano to já bych nepoužil,
s vlastním formátem se dá řešit hodně věcí

@lubo
které řešení je namysli?
Pokud to makro tak v čem nefunguje?

Jinak díky oběma.citovat
#017733
avatar
No myslel jsem, že se tu snažíte pomoct, ale vypadá to, že se vám moc nechce. Prosím tedy aby mi psali už jen ti co mají zájem pomoci s řešením problému. Prvé řešení co jste mi poslali sice vizuálně řešilo to co chci, ale já to potřebuji napasovat na již hotové řešení, které ale bohužel nemohu šířit. Proto potřebuji zástupný soubor, na kterém když mi to bude fungovat jsme schopný si to přetavit do toho v kterém to chci mít doopravdy.

Ještě jednou tedy o co mi jde:
v buňkách A1, A2, A3 mám vzorce, které se vyhodnocují a na základě vyhodnocení určí nějakou hodnotu, která se vyplní do buňky v které vzorec je. Tzn vzorec v A1 se vyhodnotí a zapíše do A1 hodnotu např. 1 pokud se ale vyhodnotí tak že A1="", tak potřebuji celý řádek 1 skrýt. To stejné analogicky pro A2, A3.

Pokud to bude fungovat jen s tím, že makro bude sledovat hodnotu buňky A1, A2, A3 a v případě hodnoty A1="" skryje řádek 1 tak mi to bohatě stačí, pokud se ale musí reagovat na přímou změnu buňky (jako že v buňce ručně změním hodnotu), tak ta se bude odehrávat akorát v buňce vzorce!B1 vše ostatní je provázáno vzorci.

Lépe už to opravdu vysvětlit neumím. A pokud někdo nechce pomoct tak ať prosím nepíše. Doufám, že se najde někdo, kdo je ochoten pomoci aniž by se tvářil nějak namyšleně.citovat
#017734
avatar
Já myslel, že chcete pomoci, ale vypadá to že ne.
Když Vám někdo radí ve smyslu, abyste napsal všechny důležité okolnosti, znamená to, že Vám chce pomoci, protože jen tak lze dosáhnout úspěšně cíle. Ty prasárny ani nebudu komentovat. Ve skrytu duše doufám, že se Vám na to každý vyprdne - omlouvám secitovat
#017745
avatar
Tak zkus toto dát do listu vzorce a do oblasti L1:L100 zapiš jména listů, kde se mají řádky skrývat.


' Předpokládám, že řídící buňka je B1
' a seznam listů je v buňkách L1:L100 (v listu Vzorce)

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [B1]) Is Nothing Then
Call Skryj ' Změnila se hodnota
ElseIf Not Intersect(Target, [L1:L100]) Is Nothing Then
Call Skryj ' Přidán další list
End If
On Error GoTo 0
End Sub

Sub Skryj()
Dim rngJmenoListu As Range
Dim oWS As Worksheet

On Error GoTo DalsiList:
For Each rngJmenoListu In [L1:L100]
Set oWS = Worksheets(rngJmenoListu.Text)
With oWS
.Rows("1:3").Hidden = True
Select Case [B1]
Case 1: .Rows("1:1").Hidden = False
Case 2: .Rows("1:2").Hidden = False
Case 3: .Rows("1:3").Hidden = False
End Select
End With
DalsiList:
Next
On Error GoTo 0
End Sub
citovat
#017746
avatar
@cmuch

Pokud ta makra měly zachytávat změnu hodnoty vzorce, tak zdroj je v tomto případě mimo list. Po zobrazení listu a klepnutí do plochy událost select přepíše původní hodnotu sledované buňky novou a ppřípadný change už žádnou změnu nepozná.

Napojení a událost activate je pravděpodobně lepší, znamená to při přidání listu zajistit existenci procedury + nevím, jestli výpočty v listu nejsou shrnuty do nějakého souhrnu (pravděpodobné při uvedeném počtu listů), a tyto výsledky mohou záviset na viditelnosti řádků (např. při použití subtotal).citovat
#017747
avatar
ps. Ještě by šlo použít událost calculate, podobně, jak to psal cmuch:


Dim puvodnihodnota As String

Private Sub Worksheet_Calculate()
If Not puvodnihodnota = Range("B5").Value Then
Call Skryj
End If
puvodnihodnota = Range("B5").Value
End Sub


Osobně nedoporučuji, je že to jde.citovat
#017754
avatar
@lubo
v ukázce to funguje s tím mým makrem, asi si nerozumíme 5

Jak jsem přišel z práce tak mě také ta možnost napadla, počkáme co tazatel na to, už je z nás nešťastný :)
Příloha: zip17754_zmenahodnotyvzorce.zip (13kB, staženo 31x)
citovat
#017755
avatar
@cmuch

OK. V ukázce zadejte

List2!A1: vložte 1
List1!B1: vložte =List2!A1
List2!A1: vložte 2

V List1!A1 se změní hodnota a hláška nikde.

Po doplnění activate by to mělo fungovat, ale je to dost překombinované a efekt se projeví až po aktivaci listu, a to obecně může být špatně.citovat
#017756
avatar
@lubo
Ok, to jsem nezkoušel. Moje chyba.citovat
#017758
avatar

lubo napsal/a:

Tak zkus toto dát do listu vzorce a do oblasti L1:L100 zapiš jména listů, kde se mají řádky skrývat.

' Předpokládám, že řídící buňka je B1
' a seznam listů je v buňkách L1:L100 (v listu Vzorce)

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [B1]) Is Nothing Then
Call Skryj ' Změnila se hodnota
ElseIf Not Intersect(Target, [L1:L100]) Is Nothing Then
Call Skryj ' Přidán další list
End If
On Error GoTo 0
End Sub

Sub Skryj()
Dim rngJmenoListu As Range
Dim oWS As Worksheet

On Error GoTo DalsiList:
For Each rngJmenoListu In [L1:L100]
Set oWS = Worksheets(rngJmenoListu.Text)
With oWS
.Rows("1:3").Hidden = True
Select Case [B1]
Case 1: .Rows("1:1").Hidden = False
Case 2: .Rows("1:2").Hidden = False
Case 3: .Rows("1:3").Hidden = False
End Select
End With
DalsiList:
Next
On Error GoTo 0
End Sub


Lubo si bůh! Toto je přesně to co jsem potřeboval. Moooooc děkuji za pomoc. Jsem rád, že se našel někdo, kdo opravdu umí. Ještě pokud můžu a máš náladu bych poprosil, zda by jsi mohl hodit popisky k jednotlivým řádkům kódu abych pochopil, jak jsi to vlastně zařídil, že to funguje. Já to hodím do souboru a vložím to sem pro ostatní, kteří budou hledat stejné řešení.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