Kousek makra, který v tomto návodu uvádím, je opravdu praktický a používám ho často.

Je to kód, který spouští libovolné makro – ovšem ne klasicky například tlačítkem, ale tím, že se změní hodnota některé buňky.

Použitím tohoto makra často v aplikacích odpadá nutnost makra fyzicky spouštět – spouští se sama, často tak, že o jejich přítomnosti uživatel ani neví.


Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
‘ Tato buňka nebo oblast když se změní, spouští se makro
Set KeyCells = Range(“A1:C10”)
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
   ‘ Následující makro se změnou buňky nebo oblasti spouští
   mojemakro
End If
End Sub


Toto makro je dost netypické v tom, že se nevkládá do modulů VBA, ale do konkrétního listu:

makro

Následuje ke stažení ukázka konkrétního využití tohoto způsobu spouštění makra.

auta_makro_filtr_automaticke_spousteni

1 Komentář

  1. Dobrý den,
    máme v práci problém s tabulkou do které se zapisují data o příjezdu vozidel a uživatel sešitu by měl každou minutu data uložit aby se zobrazili na jiném monitoru kde se tabulka o vozidlech zobrazuje nepřetržitě.Ale k tomu ho nelze donutit a informace na monitoru máme třeba 20 minut staré.Lze nějak vymyslet to aby se sešit ukládal sám po minutě? A když sešit uzavře aby ani nemusel nic ukládat proto že se to již uložilo?
    Moc děkuji za pomoc, nevíme si s tím rady a ani nevíme zda to jde. igor.f@email.cz

  2. Dotaz: funguje mi to ale jen tehdy, pokud změním hodnotu bunky či oblasti zadáním z klávesnice. Je tak? Potřeboval bych řešení, aby se provedlo makro, když se změní hodnota v určité bunce, kde je vzorec.
    Vzorec provádí výpočet podle dat z externího linku.

    Nebo alespon řešení, aby se provádělo makro např každou minutu, ale tak, aby makro bylo v kodu listu a nezatěžovalo tabulku, kde jsou prováděny trvale výpočty právě z hodnot externího linku.

  3. Dobrý den,

    snažím se dat dohromady makro, které mi bude delat nasledovné:
    mam udelanou tabulku na rizení ukolu (projektu) a potřeboval bych, aby kdyz se mi zmeni aktualní stav na hodnotu A, kde tato bunka muže nabývat pismeny A,B,C,D,F (toto je na jedno listu). Potřebuji nastavit makro tak, aby když mam hodnotu v bunce ¨A¨ pravě jen tuto hodnotu. Tak aby cely tento řádek kde se nachazi hodnota ¨A¨ v uvedené bunce vyjmul a překopiroval do druhého listu , kde je stejná tabulka a v prvním listu smaže celí řadek, aby tam nebyla prazdná místa. Na druhém lisu budou jen řádky kde bude hodnota A v uvedené buňce.
    Lze takoveto makro vybec v excelu nastavit?
    Dekuji

  4. Miloš – jde to, ale bylo by zřejmě nutné to přesně prozkoumat a pak napsat ne úplně jednoduché makro.

  5. Dobrý den,

    mohl byste mi prosím poradit, jaké zavolat makro pro změnu barvy buňky, ve které došlo ke změně hodnoty?

    Výsledek: Změní se hodnota buňky/buněk -> změní se barva buňky/buněk.

    Děkuji, PP

  6. Dobrý den, prostě přidáte makro, které mění barvu, a budete ho spouštět tím makrem, které tady uvádím… nevím jestli rozumím otázce.

  7. Mohl byste prosím konkrétně uvést to makro na změnu barvy? Moje mi nefunguje 🙂

  8. Ještě doplním, že jde o oblast, ve které dojde ke změnám v několika různých buňkách. Nikoli o jednu konkrétní buňku.

  9. Nakonec vyřešeno takto:

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

    Set KeyCells = Range(“A1:Z50”)

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
    Is Nothing Then

    Range(Target.Address).Interior.Color = RGB(144, 234, 128)

    End If
    End Sub

  10. Ahoj,
    poradí někdo s makrem, které by aktivovalo barvu prázdné buňky na základě údaje z buňky na jiném listě?
    Díky

  11. Dobrý den,
    potřebuji vyrobit formulář v excelu, ve kterém si názvy v buňkách zvolím česky / anglicky. Vše je OK, jenom mám problém s rolovacími seznamy – pokud změním jazyk, v buňkách s rolovacími výběry mi zůstanou údaje v původním jazyce, takže formulář nefunguje. Musím každou roletku otevřít a vybrat znovu. Nevím, zda je něco špatně v nastavení, nebo to je nutné řešit třeba makrem (při změně výběru jazyka se vše provede samo). Problém posílám emailem s přílohou.
    Díky za radu

  12. Dobrý den, za skvělou a praktickou věc! 🙂 Chtěla bych jen poprosit o jedno vysvětlení, makro dle návodu funguje samo, ale bohužel ne při změně hodnoty buňky, ale již při samotném kliknutí na buňku. Konkrétně mám v buňce nastaven text “NE” a v rozevíracím seznamu “ANO” a ” V PROCESU”, potřebovala bych tedy, aby ke spuštění makra došlo až po změně na ANO či V PROCESU.
    Předem mockrát díky za radu

  13. Dobrý den,
    jak provést, že po kliku myší na danou buňku s definovanou barvou se mi automaticky vyplní předdefinovaným údajem jiná buňka.
    Děkuji za pomoc

  14. Dobrý den,
    lámu si hlavu a nějak mi to už nemyslí – mohu požádat o radu.
    V listě1 mám tři sloupce (A:C) a v nich číslo produktu, rok a cenu (15tisíc záznamů na sloupec) Data kopíruji ze systému do xls. Přes fce AVERAGEIFS mi to průměruje cenu podle čísla produktu a roku, tzn. zprůměrovaná cena jednoho produktu za požadovaný rok.
    A v listě2 mám ve sloupci A čísla produktů (neopakující se jako v listě1) a v řádku 1 mám rok 2017 až 2020.
    Fce AVERAGEIFS, KDYŽ a SVYHLEDAT se pokouším, aby mi to k danému roku a produktu psalo průměrnou cenu z dat z prvního Listu. Data v Listě1 jsou proměnná – vkládaná v časovém intervalu.
    Nějak se mi to nedaří.
    Děkuji za radu, Honza

  15. Jestli dobře chápu, tak chcete vyplnit matici – tabulku, která je “křížem”. Na to by měla stačit jedna AVERAGEIFS, která bude mít pět parametrů:
    – Cenu z prvního listu
    – Sloupec z prvního listu s roky
    – ŘÁDEK z druhého listu s roky
    – Sloupec z prvního listu s produkty
    – Sloupec z druhého listu s produkty
    Aby to šlo pak roztáhnout, je většinou třeba řešit “dolarové” absolutní odkazy.

Komentáře není možné přidávat