< návrat zpět

MS Excel


Téma: Podmíněný výběr makra rss

Zaslal/a 13.1.2016 22:50

Ahojky.
Poraďte jak automaticky spustit makro v závislosti na hodnotě buňky, která obsahuje přestupný / nepřestupný rok.
Pokud vyberu v buňce C2 List Plán přestupný rok,aby mě tím bylo spuštěno makro2 ( zobrazení 29. února ), pokud nepřestupný tak makro1 ( pouze 28 dní v únoru).
Pokud makro spustím přes yývojáře tak je vše OK, ale pokud to spustím při změně buňky tak se to zacykluje.
Děkuji za každou odpověď.
Pepča

Příloha: rar29242_dovolena-pracovniku.rar (124kB, staženo 26x)
Zaslat odpověď >

#029245
elninoslov
Myslíte toto ? - vložiť kód do listu "List2 (Plán)"
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Cells(2, 3)) Is Nothing Then
Application.EnableEvents = False
If Cells(2, 3) Mod 4 = 0 Then Call Makro2 Else Call Makro1
Application.EnableEvents = True
End If
End Sub
citovat
#029248
avatar
Podstatné je to dočasné vypnutí událostí na provedení maker. Pokud makro provádí změny na listu, produkuje podněty pro opakované spouštění události Change, což neošetřeno vede na zacyklení. Elninoslov názorně ukazuje, jak z toho ven.citovat
#029250
elninoslov
Ešte by stálo za to poukázať na možný problém s EnableEvents. Ak totiž volané makro skončí chybou, debuguje, užívateľ to následne Stopne, lebo si nebude vedieť rady, tak udalosti ostanú vypnuté. V tomto prípade je pravdepodobnosť dosť malá, že pri kopírovaní nastane chyba, ale ak by sa jednalo o zložitejšie makro, tak by som odporúčal procedúry zmeniť na funkcie, obaliť ich On Error kontrolou, a riadiacej procedúre poslať info o prípadnej chybe. Aby užívateľ vedel o chybe (to by zistil aj bez toho), ale aby EnableEvents ostalo zapnuté.
Teda napr.:
Function Makro1() As Boolean
'
'Nepřestupný

On Error GoTo KONIEC
Range("BB45:BE61").Copy Destination:=Range("AF45:AI45")
Exit Function
KONIEC:
Makro1 = True
End Function
Function Makro2() As Boolean
'
' Přestupný

On Error GoTo KONIEC
Range("AU45:AX61").Copy Destination:=Range("AF45:AI45")
Exit Function
KONIEC:
Makro2 = True
End Function

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Chyba As Boolean
If Not Intersect(Target, Cells(2, 3)) Is Nothing Then
Application.EnableEvents = False
If Cells(2, 3) Mod 4 = 0 Then Chyba = Makro2 Else Chyba = Makro1
If Chyba Then MsgBox ("Nastala chyba.")
Application.EnableEvents = True
End If
End Sub


Zmenil som Vám tam kopírovanie na oveľa jednoduchšie, ak už ten február/únor chcete riešiť takto.citovat
#029253
avatar
@elninoslov
Na výpočet prestupného roku by som použil skôr vzoreček
=IF(DAY(DATE(A1;3;1)-1)=29;"prestupný";"neprestupný")
Aj keď sa zrejme zadávateľ za svojho života chyby nedopustí podľa uvedeného v makre. 1

Rok 2100 je neprestupný.citovat
#029265
avatar
Moc děkuji.
Ten kód je přesně to jsem potřeboval.
Více jak týden jsem to řešil.
Prostě kdo umí tak umí. Mám zase o čem přemýšlet.
A poznatky určitě využiji jak makro tak vzorec.
Ještě jednou díky. 9
Pepčacitovat
#029272
avatar
Jen pro legraci: znáte ten slavný lapsus Excelu, podle nějž pro Excel existuje neexistující 29.únor roku 1900? Někde jsem se dočetl, že tu chybu udělal už Lotus 1-2-3 a Excel ji údajně kvůli datové kompatibilitě převzal. Lotus jaksi zmizel ze světa, ale chyba v Excelu přežila...
Nepřestupného roku 2100 bych se nebál. Tou dobou nejspíš už zase Excel nebude existovat. Vzpomínám si, když kolega Bárta kolem roku 1970 řešil pro děrnoštítkový počítač z n.p. Aritma problém přechodu na rok 2000. Rok 2000 jsem já přežil, Honza Bárta nejspíš taky, ale devadesátisloupcové děrné štítky Holerith nikoliv.citovat
#029319
elninoslov
Tak aby bola ešte väčšia sranda, dnes som sa venoval prevážne Vám 1
"Trochu" som Vám to prerobil - prekopané je úplne všetko.

-podmienené aj normálne formátovanie
-vzorce
-dátumy
-nezáleží na mutácii SK či CZ
-všetok neporiadok okolo tabuliek preč
-správne upravovanie februáru aj s formátovaním, zlúčenými bunkami ...
-úprava nesprávnych areas v range v kopírovanej oblasti
-automatické skoky na zvolený mesiac (overenie dát)
-zbytočné riadky a stĺpce preč
-schovávanie a odkrývanie iba prázdnych riadkov a iba v tabuľkách

Ja vlastne už ani neviem čo všetko...
Mrknite, a povedzte, čo ste to tam ešte chceli formátovať tým
MOD(D5;7)<2
v podmienenom formátovaní ? Majú byť pracovné dni až po 2 týždňoch po novom roku, či čo ?

EDIT: upravené jedno zlé číslo stĺpca v makre.
Skontrolujte si, či máte v roku 2016 v bunke AK163 hodnotu True (potom si tú bunku zmažte). Ak áno tak Vám to formátovanie sviatkov fungovať musí.
Příloha: rar29319_dovolena-pracovniku2.rar (64kB, staženo 25x)
citovat
#029393
elninoslov
Iba doplním k čomu sme sa dopracovali v súkromných správach po pár úpravách. Problém bol s nefunkčnosťou podmieneného formátovania na danom Excel2007 a iné drobnosti. Tak keby niekoho zaujímalo niečo podobné ...
Příloha: zip29393_dovolena-pracovniku7.zip (66kB, staženo 32x)
citovat

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