Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  45 46 47 48 49 50 51 52 53   další » ... 289

c2 nie je premenná ale adresa bunky, takže musíte inak na bunku. Skúste to s vypnutím Calculation.

A prečo po mne kričíte?

V tom prípade neviem ako to urobiť bez straty Undo. Jednoduchý príklad tu (makro do modulu zdrojového listu):
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Target.Parent.Range("E10").Copy Destination:=ThisWorkbook.Worksheets("Hárok2").Range("D26")
End Sub

Vymeňte ten riadok ActiveWorkbook.SaveAs za
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
sDir & IIf(Right(sDir, 1) <> "\", "\", "") & wList.Name & " - " & c2 & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties _
:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

ale aj tak ... podadresár "pdf" existuje? Application.StatusBar = False je zbytočný ak pred tým do StatusBaru nič nevpisujete. Čo s tým novovytvoreným súborom s listom? Asi zatvoriť bez uloženia (pdf už je uložené), nie ?

No a čo všetko sa má kopírovať? Hodnota, formát, písmo, formát komentu, ...
Tento príklad je možno bizarný, a vyvolá diskusie o tom, ako by funkcia (na rozdiel od procedúry) nemala meniť objekty. No ale je to jediný spôsob, ako nestratíme Undo. Lebo naproti tomu, keď budeme odchytávať vo Worksheet_Change zmenu zdrojovej bunky a meniť cieľovú, vykonáme procedúru, a tým stratíme Undo. Ale zase by sme mohli skopírovať celú bunku (koment, formát, rám, písmo, ...)
Function ZRKADLI_BUNKU(Zdroj As Range, Ciel As Range) As Variant

Application.Volatile

On Error Resume Next
ZRKADLI_BUNKU = Zdroj.Value 'hodnota zo zdroja do cieľa

If Not Zdroj.Comment Is Nothing Then 'ak má zdroj komentár tak ho skopíruj do cieľa
If Ciel.Comment Is Nothing Then 'ak cieľ nemá komentár, tak ho vytvor
Ciel.AddComment Text:=Zdroj.Comment.Shape.TextFrame.Characters.Text
Else 'ak cieľ má komentár, tak ho zmeň
Ciel.Comment.Text Text:=Zdroj.Comment.Shape.TextFrame.Characters.Text
End If
Else 'ak zdroj komentár nemá, ale cieľ áno, tak ho zmaž
If Not Ciel.Comment Is Nothing Then Ciel.Comment.Delete
End If
End Function

V prípade UDF funkcie musí prísť k prepočtu, teda samotná zmena zdrojového komentu nevyvolá zmenu cieľového komentu. Až zmena nejakej hodnoty v zošite vyvolá prepočet a zmenu.

Uveďte presnejší popis + príklad.

Na posledný záznam podľa A? Alebo na posledný záznam zvoleného oddelenia? Pretože ak iba na posledný záznam v A, tak výberový zoznam v K2 nemá pre operáciu význam. A čo má spustiť tento krok? Zmena v bunke K2?

EDIT:
Na to ako som to pochopil, by sa dal zneužiť vzorec v EVALUATE 1
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zmena As Range, LST As String

Set Zmena = Intersect(Range("K2"), Target)

If Not Zmena Is Nothing Then
With Range(Range("A24"), Cells(Rows.Count, "A").End(xlUp))
LST = .Parent.Name

On Error Resume Next
Cells(Evaluate("=LOOKUP(2,1/('" & LST & "'!" & .Offset(0, 8).Address & "='" & LST & "'!" & Zmena.Address & "),ROW('" & LST & "'!" & .Address & "))"), "A").Select
End With
End If
End Sub

Tak moment, moment...
Veď to počíta správne. Skontrolujte si tento súbor. Hodnoty som si tam pomenil. Vpravo som manuálne vyrobil tabuľku, aké by mali byť výsledky (bez prepočítavania Excelom). Vo Vašej tbl sú 3 druhy vzorcov, a všetky počítajú tak, ako by to číslo na 15-om desatinnom mieste ani nebolo. Pridal som Podmienené formáty, ktoré očervenejú, ak výsledok nesedí. Máte v tých počítaných stĺpcoch H, I, J niečo červené ?

Tak uvidíme, kde je ten pes zakopaný. Dúfam, že som myslel na všetky možné eventuality:
Sub Click()
Dim Nazev_Stlaceneho_Obrazku As String
Dim Link_Stranky As String
Dim Adresa_Bunky_Pod_Obrazkem As String

On Error Resume Next
Nazev_Stlaceneho_Obrazku = Application.Caller
If Nazev_Stlaceneho_Obrazku = "" Then MsgBox "Makro nebylo spuštěno kliknutím na obrázek nad linkem.", vbExclamation: Exit Sub

With ThisWorkbook.ActiveSheet.Shapes(Application.Caller)
Adresa_Bunky_Pod_Obrazkem = .TopLeftCell.Address(0, 0)
Link_Stranky = .TopLeftCell.Value
End With

If Link_Stranky = "" Then MsgBox "Pod obrázkem """ & Nazev_Stlaceneho_Obrazku & """ v buňce " & Adresa_Bunky_Pod_Obrazkem & " není vyplněný link.", vbExclamation: Exit Sub

On Error GoTo CHYBA
ThisWorkbook.FollowHyperlink Address:=Link_Stranky
Exit Sub

CHYBA:
MsgBox "Jiná neošetřená chyba", vbExclamation
End Sub

Vskutku. Excelu totiž namiesto
99,5 - 99,3 = 0,2
vychádza
99,5 - 99,3 = 0,200000000000003
Treba vymyslieť nejakú fintu, ako ho prinútiť počítať správne. Nepomáha ani zaokrúhlenie dole pomocou FLOOR(C4-B4;0,1). SUMIF, SUMPRODUCT, ale aj matica aj tak vyhodnotí 0,200000000000003.
Hmmm...
Koľko tam môže bežne nastať desatinných miest v C a B?

Tam treba urobiť aj opatrenia na čo najmenší počet možných zlyhaní a omylov. Príklad.

V tom prípade by mal byť ten vzorec v poriadku, akurát že Vy hovoríte o zľave a ja tam čítam slová o pokute 1

Riadok 8.
Nasmlouvané SLA 99,5
Skutečné SLA 99,7
Je 0,2 nad nasmlouvaným. Bude pokuta???

Raidok 4.
Nasmlouvané SLA 99,5
Skutečné SLA 99,3
Je -0,2 pod nasmlouvaným. Bude pokuta, že!

Tie stĺpce B a C sú čo? To sú už %? Alebo % si má najprv vzorec vypočítať a toto je napr. kapacita (alebo čokoľvek množstevné)?

Ak sú to % a z nich sa berie rozdiel iba pre nesplnené odbery (iba menšie) tak napr.
=IF(C4>B4;A4*IF(C4-B4>=$E$10;$G$10;SUMPRODUCT($G$4:$G$9;(C4-B4>=$E$4:$E$9)*(C4-B4<$F$4:$F$9)));0)
=KDYŽ(C4>B4;A4*KDYŽ(C4-B4>=$E$10;$G$10;SOUČIN.SKALÁRNÍ($G$4:$G$9;(C4-B4>=$E$4:$E$9)*(C4-B4<$F$4:$F$9)));0)

alebo
=IF(C4>B4;A4*IF(C4-B4>=$E$10;$G$10;SUMIFS($G$4:$G$9;$E$4:$E$9;"<="&C4-B4;$F$4:$F$9;">"&C4-B4));0)
=KDYŽ(C4>B4;A4*KDYŽ(C4-B4>=$E$10;$G$10;SUMIFS($G$4:$G$9;$E$4:$E$9;"<="&C4-B4;$F$4:$F$9;">"&C4-B4));0)

Potrebujete vypočítať "Smluvní pokuta - vypočítaná z ceny za službu" z rozdielu medzi "Skutečné SLA pro výpočet" a "Nasmlouvané SLA" ? Iba ak je skutočné menej? Alebo aj keď je viac?

Ale ono to ide, označíte ako zdroj stĺpce Tabuľky o ktoré ide. Síce vidíte ako zdroj adresu buniek, čo navodzuje dojem napevno nastavenej oblasti, ale ona sa bude dynamicky meniť, ak pridáte do Tabuľky riadok. Aspoň čo som teraz narýchlo skúsil. Celkovo použitie bude ale záležať aj od toho, čo chcete presne dostať ako výstup a z akých dát. Ak chcete napr. nejaký súčet za zamestnanca (vyskytujúceho sa na viac riadkoch), tak na to práve slúži KT, ale môžete to urobiť v pomocných stĺpcoch teoreticky s jedinečným zoznamom mien pomocou COUNTIF v jednom stĺpci a SUMIF v ďalšom.
S grafmi síce takmer absolútne nepracujem, ale to čo spomínam som terazky vyskúšal a funguje.

NeroX, veď Vám Jiří poslal prílohu s príkladom. Ale urobil by som to robustnejšie asi takto. Viď popis makra aj s nejakými odôvodneniami. Napr. maže dátum po zmazaní mena. Obsluhuje viacnásobné oblasti a viacbunkové zmeny.

Skúšal ste? Ak áno, čo nefungovalo ako potrebujete?
Neviete ako to implementovať? Dodajte prílohu. Reálnu prílohu s reálnym rozmiestnením, formátom, typom dát, rozsahom a pod, len anonymizovanú.

Je aj určitá obmedzená možnosť použiť Iteračné výpočty a vzorec, ktorý v tom prípade môže odkazovať sám na seba, ale to sa zapína v nastavení Excelu. Ak by ste potom taký súbor otvoril v Exceli, ktorý to zapnuté nemá, dostanete hlášku o zacyklených odkazoch a nebude to fungovať.

Makro má ale tiež nevýhody. Použitím makra prídete v zošite o Undo.

Vyskúšajte výhradne na kópii dát !!!
Určite si prečítajte popisy makra.
Porovnajte makro Short so zvyškom kódu.

To aby ste si vedel predstaviť rozdiel triviálneho makra vs. čo najviac robustné, zabezpečené voči omylu, pádu a poškodeniu dát.

Vzniká tu tak malý/veľký paradox, že čím viac vecí nechávate na užívateľovi, tým je makro jednoduchšie, menšie, prehľadnejšie, no nebezpečnejšie. A čím viac kontrolujete, ochraňujete, myslíte na eventuality, je makro dlhšie, neprehľadnejšie, a paradoxne tým vlastne tiež náchylnejšie na chybu - tentoraz zo strany programátora. A preto sú SW čím ďalej síce sofistikovanejšie ale zabugovanejšie, keď sa im nevenuje poriadna pozornosť a investície. Viď Windows ...

Dajte vedieť. Nezaručujem otestovanie na 100%, zase toľko ma to nebavilo...

A ak by mohol byť aj Úprava.xlsm (teda s makrom), tak by bolo možno užívateľsky dobré a bezpečné, aby videl v C2 (pomocou makro UDF funkcie) čo je v Data.xlsm na danom stĺpci za týždeň.


Strana:  1 ... « předchozí  45 46 47 48 49 50 51 52 53   další » ... 289

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

Týden v roce

Petr92 • 16.7. 15:34

Řazení podle času v kategoriích

veny • 16.7. 11:34

špatný výpočet ze zisku - příčina?

Anonym • 12.7. 22:56

špatný výpočet ze zisku - příčina?

Jakoby • 12.7. 12:35

Řazení podle času v kategoriích

Marekh • 12.7. 9:55

Porovnávací Tabulka

Jess • 8.7. 20:49

Vzorec pro zkopírování obsahu buňky.

veny • 6.7. 8:28