Vytvořil jsem výkaz pracovní doby, který má za úkol nakopírovat zadanou pracovní dobu (šedohnědá oblast s časy) do zadaného kalendářního měsíce (měsíc - změna v žlutém poli).
1) Moje přání by bylo vzorce, které jsem zadal do buněk H8:K32 zadávat makrem, které by do buňky napsalo jen čas z tabulky ( šedohnědá oblast) tak, aby v poli nebyl vzorec jako nyní, ale pouze hodnota (třeba 7:00). Je to z toho důvodu, že doba se může v jednom dni změnit a to si já přepíši ručně, sloupec checker pouze zkontroluje, zda je součet pracovní doby v týdnu požadovaný počet za týden (nejčastěji 40 hodin).
Mám problém s tím, že neumím v VBA napsat aby se v buňce vyhodnotil vzorec a napsala se pouze jeho hodnota, pročítal jsem zde forum a vždy mi to na něčem skončilo nepovedené.
2)Dále bych potřeboval makro, které by nastavilo tisk na pouze první stránku listu a nabídlo okno z možností volby tiskárny.
3) A poslední věc je udělat posuvník, nebo číselník, který by posunul datum o jeden měsíc nahoru nebo dolů, aby se nemuselo přepisovat datum ručně ve žlutém poli.
http://uloz.to/xbAkfB7K/platy-xlsm
Výkaz pracovní doby
Výkaz pracovní doby
- Přílohy
-
- platy.xlsm
- (28.22 KiB) Staženo 69 x
Naposledy upravil(a) honz/a dne 24 čer 2013 20:33, celkem upraveno 2 x.
-
- člen HW spec týmu
-
Elite Level 12
- Příspěvky: 16106
- Registrován: květen 08
- Bydliště: České Budějovice
- Pohlaví:
- Stav:
Offline
Re: Výkaz pracovní doby
Vítej na PC-HELP
Pro příště dej přílohu přímo do příspěvku, jsme moderní fórum a toto zvládáme
Výsledky Checker jsou v buňce vedle pondělí záměrně?
Dialog pro tisk s výběrem tiskárny se volá zkratko ctrl p. Umím to na tlačítko, ale nevím jestli tam dokážu předat parametr.
Pro příště dej přílohu přímo do příspěvku, jsme moderní fórum a toto zvládáme
Výsledky Checker jsou v buňce vedle pondělí záměrně?
Dialog pro tisk s výběrem tiskárny se volá zkratko ctrl p. Umím to na tlačítko, ale nevím jestli tam dokážu předat parametr.
Nikdy neříkej, že to nejde, protože se najde někdo, kdo o tom neví a udělá to!
Chcete si nechat sestavit nový počítač?
Chcete si nechat sestavit nový počítač?
Re: Výkaz pracovní doby
1) moderní možná jsme, ale až ted jsem objevil políčko příloha, omlouvám se
2) checker kontroluje od pondělí do pátku, proto je to u pondělí, vždy na počátku týdne, je to jen pro nějaký vizuální dojem
3) vím jak se tiskne, ale chtěl jsem to udělat na tlačítko po kterém rovnou vyskočí výběr tiskárny, ale už nebudu muset říkat, co chci tisknout, vždy to bude pouze první strana
2) checker kontroluje od pondělí do pátku, proto je to u pondělí, vždy na počátku týdne, je to jen pro nějaký vizuální dojem
3) vím jak se tiskne, ale chtěl jsem to udělat na tlačítko po kterém rovnou vyskočí výběr tiskárny, ale už nebudu muset říkat, co chci tisknout, vždy to bude pouze první strana
-
- Level 4.5
- Příspěvky: 1544
- Registrován: březen 11
- Bydliště: Drsná Vysočina :D
- Pohlaví:
- Stav:
Offline
Re: Výkaz pracovní doby
Ad3)
Zobrazení výběru tiskárny, tisk první stránky
Zobrazení výběru tiskárny, tisk první stránky
Kód: Vybrat vše
Application.Dialogs(xlDialogPrinterSetup).Show
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1
Re: Výkaz pracovní doby
to si myslím, že je vyřešené, za tohle děkuji
cmuch píše:Ad3)
Zobrazení výběru tiskárny, tisk první stránkyKód: Vybrat vše
Application.Dialogs(xlDialogPrinterSetup).Show
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1
-
- Level 4.5
- Příspěvky: 1544
- Registrován: březen 11
- Bydliště: Drsná Vysočina :D
- Pohlaví:
- Stav:
Offline
Re: Výkaz pracovní doby
--
Na toto bych použil prvek formuláře ČÍSELNíK kde si ho přes pravé tlačítko přispůsobíš a do buňky s datumem bych vložil vlastní formát buňky 0" / 2013"
--
Tak si zkus přes záznamník maker toto naprogramovat.
- Naprogramuj vzorce
- nakonec můžeš označit oblast, dát kopírovat a vložit jinak - pouze hodnoty
3) A poslední věc je udělat posuvník, nebo číselník, který by posunul datum o jeden měsíc nahoru nebo dolů, aby se nemuselo přepisovat datum ručně ve žlutém poli.
Na toto bych použil prvek formuláře ČÍSELNíK kde si ho přes pravé tlačítko přispůsobíš a do buňky s datumem bych vložil vlastní formát buňky 0" / 2013"
--
1) Moje přání by bylo vzorce, které jsem zadal do buněk H8:K32 zadávat makrem, které by do buňky napsalo jen čas z tabulky ( šedohnědá oblast) tak, aby v poli nebyl vzorec jako nyní, ale pouze hodnota (třeba 7:00). Je to z toho důvodu, že doba se může v jednom dni změnit a to si já přepíši ručně, sloupec checker pouze zkontroluje, zda je součet pracovní doby v týdnu požadovaný počet za týden (nejčastěji 40 hodin).
Tak si zkus přes záznamník maker toto naprogramovat.
- Naprogramuj vzorce
- nakonec můžeš označit oblast, dát kopírovat a vložit jinak - pouze hodnoty
Re: Výkaz pracovní doby
pokud se někdo podíval do maker, už tam jeden takový pokus byl, ale nebudu nahrávat makro pro 120 buněk, když je to otázka vyplnění matice pro dvě proměnné i,j, mám problém to dát do jazyku VBA, ne vyřešit algoritmus a ještě to nahrávat
je vidět, že se po změně řádku mění hledaná hodnota pro svyhledat, po změně sloupce sloupec pro vyhledávání,
H: =KDYŽ(T8=$T$8;KDYŽ(SVYHLEDAT(S8;$U$9:$V$15;2;0)=0;"";SVYHLEDAT(S8;$U$9:$V$15;2;0));"")
pro další řádek H
H: =KDYŽ(T9=$T$8;KDYŽ(SVYHLEDAT(S9;$U$9:$V$15;2;0)=0;"";SVYHLEDAT(S9;$U$9:$V$15;2;0));"")
potřebuji zavést proměnné pro automatické zpracování
I : =KDYŽ(T8=$T$8;KDYŽ(SVYHLEDAT(S8;$U$9:$W$15;3;0)=0;"";SVYHLEDAT(S8;$U$9:$W$15;3;0));"")
J: =KDYŽ(T8=$T$8;KDYŽ(SVYHLEDAT(S8;$U$9:$X$15;4;0)=0;"";SVYHLEDAT(S8;$U$9:$X$15;4;0));"")
K: =KDYŽ(T8=$T$8;KDYŽ(SVYHLEDAT(S8;$U$9:$Y$15;5;0)=0;"";SVYHLEDAT(S8;$U$9:$Y$15;5;0));"")
tohle je reálný problém na úrovni, ne jako když tady zápasí někdo s podmínkou když.
potřebuji návod jak zkloubit programování a jíž definované vzorce v Excelu
je vidět, že se po změně řádku mění hledaná hodnota pro svyhledat, po změně sloupce sloupec pro vyhledávání,
H: =KDYŽ(T8=$T$8;KDYŽ(SVYHLEDAT(S8;$U$9:$V$15;2;0)=0;"";SVYHLEDAT(S8;$U$9:$V$15;2;0));"")
pro další řádek H
H: =KDYŽ(T9=$T$8;KDYŽ(SVYHLEDAT(S9;$U$9:$V$15;2;0)=0;"";SVYHLEDAT(S9;$U$9:$V$15;2;0));"")
potřebuji zavést proměnné pro automatické zpracování
I : =KDYŽ(T8=$T$8;KDYŽ(SVYHLEDAT(S8;$U$9:$W$15;3;0)=0;"";SVYHLEDAT(S8;$U$9:$W$15;3;0));"")
J: =KDYŽ(T8=$T$8;KDYŽ(SVYHLEDAT(S8;$U$9:$X$15;4;0)=0;"";SVYHLEDAT(S8;$U$9:$X$15;4;0));"")
K: =KDYŽ(T8=$T$8;KDYŽ(SVYHLEDAT(S8;$U$9:$Y$15;5;0)=0;"";SVYHLEDAT(S8;$U$9:$Y$15;5;0));"")
tohle je reálný problém na úrovni, ne jako když tady zápasí někdo s podmínkou když.
potřebuji návod jak zkloubit programování a jíž definované vzorce v Excelu
-
- Level 4.5
- Příspěvky: 1544
- Registrován: březen 11
- Bydliště: Drsná Vysočina :D
- Pohlaví:
- Stav:
Offline
Re: Výkaz pracovní doby
Co takto?
Kód: Vybrat vše
Sub Vzorce_pro_HIJKL()
'Sloupec H
Range("H8").FormulaR1C1 = _
"=IF(RC[12]=R8C20,IF(VLOOKUP(RC[11],R9C21:R15C22,2,0)=0,"""",VLOOKUP(RC[11],R9C21:R15C22,2,0)),"""")"
Range("H8").AutoFill Destination:=Range("H8:H38"), Type:=xlFillDefault
'Sloupec I
Range("I8").FormulaR1C1 = _
"=IF(RC[11]=R8C20,IF(VLOOKUP(RC[10],R9C21:R15C23,3,0)=0,"""",VLOOKUP(RC[10],R9C21:R15C23,3,0)),"""")"
Range("I8").AutoFill Destination:=Range("I8:I38"), Type:=xlFillDefault
'Sloupec J
Range("J8").FormulaR1C1 = _
"=IF(RC[10]=R8C20,IF(VLOOKUP(RC[9],R9C21:R15C24,4,0)=0,"""",VLOOKUP(RC[9],R9C21:R15C24,4,0)),"""")"
Range("J8").AutoFill Destination:=Range("J8:J38"), Type:=xlFillDefault
'Sloupec K
Range("K8").FormulaR1C1 = _
"=IF(RC[9]=R8C20,IF(VLOOKUP(RC[8],R9C21:R15C25,5,0)=0,"""",VLOOKUP(RC[8],R9C21:R15C25,5,0)),"""")"
Range("K8").AutoFill Destination:=Range("K8:K38"), Type:=xlFillDefault
'Sloupec L
Range("L8").FormulaR1C1 = _
"=IF(RC[-4]="""","""",(RC[-3]-RC[-4])+IF(RC[-2]="""",0,(RC[-1]-RC[-2]))-R9C29)"
Range("L8").AutoFill Destination:=Range("L8:L38"), Type:=xlFillDefault
End Sub
Re: Výkaz pracovní doby
ještě jsem si přidal:
převede to vzorce jen na číselné hodnoty, takže pokud někdo něco bude chtít přepsat, přepíše čísla (taky to jde, že to nebudu dělat buňku po buňce, ale vyberu celou oblast a s tím udělám 2x překopírování)
Celkové přemýšlím, jak by to šlo napsat ještě ekonomičtěji, tj. spojit to tvoje a to moje do jednoho zápisu . Za to tvoje tě moc děkuji, splňuje to přesně funkčnost.
Teď už jen ten posuvník, nad kterým pořád také přemýšlím.
A také jsem si vzpomněl, že je příkaz - vše proběhne na pozadí a je vidět až výsledek
Kód: Vybrat vše
For j = 8 To 11
For i = 8 To 38
Cells(i, 14) = Cells(i, j)
Cells(i, j) = ""
Cells(i, j) = Cells(i, 14)
Cells(i, 14) = ""
Next i
Next j
převede to vzorce jen na číselné hodnoty, takže pokud někdo něco bude chtít přepsat, přepíše čísla (taky to jde, že to nebudu dělat buňku po buňce, ale vyberu celou oblast a s tím udělám 2x překopírování)
Celkové přemýšlím, jak by to šlo napsat ještě ekonomičtěji, tj. spojit to tvoje a to moje do jednoho zápisu . Za to tvoje tě moc děkuji, splňuje to přesně funkčnost.
Teď už jen ten posuvník, nad kterým pořád také přemýšlím.
A také jsem si vzpomněl, že je příkaz
Kód: Vybrat vše
Application.ScreenUpdating = False
Re: Výkaz pracovní doby
Pár drobných poznámek:
Používáš zbytečně komplikované vzorce:
Např.:
Místo
=KDYŽ(DENTÝDNE(G8;2)=1;"Po";KDYŽ(DENTÝDNE(G8;2)=2;"Út";KDYŽ(DENTÝDNE(G8;2)=3;"St";KDYŽ(DENTÝDNE(G8;2)=4;"Čt";KDYŽ(DENTÝDNE(G8;2)=5;"Pá";KDYŽ(DENTÝDNE(G8;2)=6;"So";"Ne"))))))
stačí
=HODNOTA.NA.TEXT(G8;"ddd")
Pokud lehce upravíš tabulku $U$9:$Y$15 pak např. v H8 místo
=KDYŽ(T8=$T$8;KDYŽ(SVYHLEDAT(S8;$U$9:$V$15;2;0)=0;"";SVYHLEDAT(S8;$U$9:$V$15;2;0));"")
stačí napsat:
=KDYŽ(T8=$T$8;SVYHLEDAT(S8;$U$9:$V$15;2;0);"")
Úprava je jednoduchá - do prázdných buněk napiš ' (jednoduchá uvozovka)
Protože předpokládám, že celá operace s mezerami je A) kvůlu vzledu, B) kvůli odečítání přestávky na oběd tak s tabulkou nemusíš dělat nic,
Nulové časy skryjete formátem - uživatelský formát: (ty středníky tam mají být)
Zápornému času zamezíte v L8 např.: =MAX(0;I8-H8+K8-J8-$AC$9)
Potom ovšem místo "" ve vzorcích pište 0
H8: =KDYŽ(T8=$T$8;SVYHLEDAT(S8;$U$9:$V$15;2;0);0)
Mimochodem ten kód co jsi psal m;6e3 napsat i jinak a myslím i čitelněji:
Stačí:
Používáš zbytečně komplikované vzorce:
Např.:
Místo
=KDYŽ(DENTÝDNE(G8;2)=1;"Po";KDYŽ(DENTÝDNE(G8;2)=2;"Út";KDYŽ(DENTÝDNE(G8;2)=3;"St";KDYŽ(DENTÝDNE(G8;2)=4;"Čt";KDYŽ(DENTÝDNE(G8;2)=5;"Pá";KDYŽ(DENTÝDNE(G8;2)=6;"So";"Ne"))))))
stačí
=HODNOTA.NA.TEXT(G8;"ddd")
Pokud lehce upravíš tabulku $U$9:$Y$15 pak např. v H8 místo
=KDYŽ(T8=$T$8;KDYŽ(SVYHLEDAT(S8;$U$9:$V$15;2;0)=0;"";SVYHLEDAT(S8;$U$9:$V$15;2;0));"")
stačí napsat:
=KDYŽ(T8=$T$8;SVYHLEDAT(S8;$U$9:$V$15;2;0);"")
Úprava je jednoduchá - do prázdných buněk napiš ' (jednoduchá uvozovka)
Protože předpokládám, že celá operace s mezerami je A) kvůlu vzledu, B) kvůli odečítání přestávky na oběd tak s tabulkou nemusíš dělat nic,
Nulové časy skryjete formátem - uživatelský formát:
Kód: Vybrat vše
h:mm;;
Zápornému času zamezíte v L8 např.: =MAX(0;I8-H8+K8-J8-$AC$9)
Potom ovšem místo "" ve vzorcích pište 0
H8: =KDYŽ(T8=$T$8;SVYHLEDAT(S8;$U$9:$V$15;2;0);0)
Mimochodem ten kód co jsi psal m;6e3 napsat i jinak a myslím i čitelněji:
Stačí:
Kód: Vybrat vše
With Range("H8:K38")
.Value = .Value
End With
Re: Výkaz pracovní doby
Komplikované vzorce mám, asi je to z důvodu, že jsem naposledy viděl Pascal a tam funkce hodnota.na.text nebyl , ale díky za postřehy, já jsem začátečník, samouk a tímto se neživím (navíc toto celé vzniká z důvodu toho, že bych měl psát vše ručně každý měsíc). U tebe je vidět, že máš už něco za sebou.
Ještě bych potřeboval posuvník, který by změnil ve žlutém poli jen měsíc a ta změna tím posuvníkem by spustila celý ten přepočet, tedy to samovyplnění pracovní doby. Pak už jen přidám tlačítko na tu tiskárnu a je to hotové.
Možná bych taky ocenil nějaké postřehy v sloupci checker, který má za úkol počítat zda je v tom týdnu vykázána pracovní doba 40 h (respektive pole s požadovanou pracovní dobou), sloupec chybí v týdnu má za úkol zjistit kolik minut chybí v týdnu do požadovaného počtu, sloupec do pá plní dopočet pokud týden nezačíná pondělím, sloupec chybí do pátku je dopočet pro týden nezapočatý pondělím.
Jinak rozmístění všeho je tam uděláno pro přehlednost a spíše moji kontrolu, ve výsledku to tam nebude jen sloupeček O,P,Q,R a šedivé tabulky pro zadání doby.
Ještě bych potřeboval posuvník, který by změnil ve žlutém poli jen měsíc a ta změna tím posuvníkem by spustila celý ten přepočet, tedy to samovyplnění pracovní doby. Pak už jen přidám tlačítko na tu tiskárnu a je to hotové.
Možná bych taky ocenil nějaké postřehy v sloupci checker, který má za úkol počítat zda je v tom týdnu vykázána pracovní doba 40 h (respektive pole s požadovanou pracovní dobou), sloupec chybí v týdnu má za úkol zjistit kolik minut chybí v týdnu do požadovaného počtu, sloupec do pá plní dopočet pokud týden nezačíná pondělím, sloupec chybí do pátku je dopočet pro týden nezapočatý pondělím.
Jinak rozmístění všeho je tam uděláno pro přehlednost a spíše moji kontrolu, ve výsledku to tam nebude jen sloupeček O,P,Q,R a šedivé tabulky pro zadání doby.
-
- Level 4.5
- Příspěvky: 1544
- Registrován: březen 11
- Bydliště: Drsná Vysočina :D
- Pohlaví:
- Stav:
Offline
Re: Výkaz pracovní doby
Ten posuvník jsem psal 6 příspěvků výše.
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 2
- 706
-
od Martab
Zobrazit poslední příspěvek
04 úno 2024 12:24
-
-
Pracovní / herní PC - cca 65 000 Kč.
od XartiQ » 07 bře 2024 11:42 » v Rady s výběrem hw a sestavením PC - 7
- 1138
-
od Alferi
Zobrazit poslední příspěvek
08 bře 2024 09:45
-
-
-
Pracovní/Herní PC kolem 40k bez DPH
od korbisko » 29 kvě 2024 09:20 » v Rady s výběrem hw a sestavením PC - 3
- 1040
-
od Alferi
Zobrazit poslední příspěvek
31 kvě 2024 08:14
-
-
-
Herní/pracovní PC s periferiemi pc 50-55k bez case
od majkl 11 » 03 čer 2024 14:56 » v Rady s výběrem hw a sestavením PC - 2
- 352
-
od Alferi
Zobrazit poslední příspěvek
03 čer 2024 16:43
-
-
-
Pracovní stanice i9 9900, 48GB DDR4,RTX 4000 8GB,SSD+8TB HDD
od DeNNI85 » 25 črc 2023 10:10 » v P: Hardware - 3
- 3532
-
od DeNNI85
Zobrazit poslední příspěvek
20 srp 2023 18:41
-
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů