Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  186 187 188 189 190 191 192 193 194   další » ... 298

Ak je príloha xlsm, musíte ju zabaliť do ZIP/RAR, a nesmie byť väčšia ako 256KB. Ak sa nezmestí, uploadnite ju niekde na Free úložisko a dajte odkaz.

Tak potom aj takto sa dá, a definovaným názvom ľahko nahradíte A1:A5 dynamickou oblasťou.
=(MAX(A1:A5)-MIN(A1:A5))/(COUNTA(A1:A5)-1)
=(MAX(A1:A5)-MIN(A1:A5))/(POČET(A1:A5)-1)

Pre podstatné zjednodušenie (netreba dopĺňať vzorec s podmienkou) je to ako Tabuľka, nie tabuľka. Na toto makro nepotrebujete. Ten klik na filter v hlavičke Tabuľky v stĺpci s podmienkou zvládnete aj bez makra. Podmienka je v skrytom stĺpci AK, to si kľudne odkryte. Filtrovaná hodnota sa berie z bunky AN1, ak tam nič nieje filtrujú sa len prázdne riadky (prázdnym riadkom sa rozumie taký v ktorom sa v uvedených stĺpcoch nič nenachádza). Oblasť tlače je nastavená na A:AJ. Tie 3 riadky kódu som Vám tam napísal, ale nepotrebujete ich.

Flintu do žita len tak nehádžem, ale pri Vás ju tuším aj zakopem :)
Tak ešte raz, dokola, čo so Vám písal minule, aj predminule s kontrolou 0 a 1 ...

Makro nedostane žiadnu indíciu o tom, že sa zmenila nejaká bunka vzorcom. Makro dostane iba informáciu, že sa prepočítava celý list - procedúra Calculate. Makro netuší nič o Vašej požadovanej informácii, či sa zmenila niektorá bunka v A na 0.

Preto som sa Vás minule pýtal, čo spôsobuje zmenu. Nepozerajme sa teraz vôbec na stĺpec A. Kašle naň pes. Je to výsledok podľa buniek J a K. Teda otázka znie :
Čo spôsobuje zmenu v J a K ? Je tam vzorec, alebo tam vpisuje hodnoty makro či Vy ručne ?

Ak je tam vzorec, tak aký ? Pozrime sa na bunky v tom vzorci, a nájdime takú ktorú mení makro alebo Vy. Prečo ? Lebo ak je zmenená nejaká hodnota makrom alebo Vami, tak VBA dostane indíciu, ktorá presne bunka bola zmenená. A keď budeme vedieť, ktorá bola zmenená, začneme podľa vzorcov v J a K (alebo v iných stĺpcoch, neviem kam až sa dostaneme po manuálne zapisovanú hodnotu), podľa náväznosti vypočítavať, čo je v A.

A sme doma, lebo zistíme, že bola vlastne v konečnom dôsledku zmenená 0 v A.

Chápete?

Ak totiž nikde nebudete vkladať ručne hodnotu, ale všetko čo je naviazané na A bude iba vzorcami, napadá ma okrem toho čo som Vám písal minule (nechať niekde v liste kópiu starých dát a pri každej Calculate ju kontrolovať - pomalé), ešte možnosť pri otvorení súboru načítať do Poľa tabuľku z listu, a pri každom Calculate kontrolovať - tiež pomalé, ale rýchlejšie ako kontrolovať všetky bunky v liste.

Ak to nezistíte, ktorá bunka bola zmenená, tak Vám bude makro v Calculate odosielať mail neustále, aj pri zmene bunky v B alebo C, proste ktorejkoľvek, nie iba v A, ako potrebujete!

Chápeme sa, ale bo zase nič ?

Teda teraz napíšte, čo je v J a v K, ak je tam niekde vzorec, napíšte čo je v bunkách použitých vo vzorci, ... opakujte až kým neprídete po nejakú bunku menenú bez vzorca.

Príklad:
Sub NastavHlavisku()
Dim S As String, Vyska As Single
S = InputBox("Zadej výšku řádku v rozmezí 12-40", "Výška písma", 12)
If Not IsNumeric(S) Then MsgBox ("Chyba !"): Exit Sub
Vyska = Val(S)
If Vyska < 12 Or Vyska > 40 Then MsgBox ("Nesprávna veľkosť"): Exit Sub
ActiveSheet.PageSetup.LeftHeader = "&" & Vyska & Sheets("tiskZmenyZahlavi").Range("B3")
End Sub

Za ActiveSheet bude ten list na ktorý sa odkazujete cez With, a ten "tiskZmenyZahlavi" je asi iba zdroj textu...

Ale to som Vám tuším vravel už minule (či to ste nebol Vy ???) - netestovať farbu spôsobenú PF, ale rovnakú podmienku akú má PF. Aj som Vám to chcel teraz napísať, ale keďže som nenašiel pre M žiadne PF, a chcel ste kontrolovať farbu, tak jediné, čo ma napadlo, že to farbíte ručne, a to by inak ako týmto makrom nešlo. Takže "M" nieje treba testovať na farbu.
O stĺpci "O" ste nič nevravel. Takže ako teda ?
Chcete do "X" napísať "Vychystáno" v týchto 3 prípadoch :
- v stĺpcoch N a M je rovnaká hodnota
- v stĺpcoch O a M je rovnaká hodnota
- v stĺpcoch N aj O aj M je rovnaká hodnota

Ak tam v "X" môžete mať vzorec, tak na to nepotrebujete ani makro, ak nie tak:
Sub Vychystano()
Dim R As Long, RNG As Range, i As Long, H()
With Worksheets("Dluhy")
R = .Cells(Rows.Count, 1).End(xlUp).Row - 2
If R = 0 Then Exit Sub
With .Cells(3, 24).Resize(R)
H = .Offset(0, -11).Resize(, 3).Value2
For i = 1 To R
If H(i, 1) = H(i, 2) Or H(i, 1) = H(i, 3) Then
If RNG Is Nothing Then Set RNG = .Cells(i) Else Set RNG = Union(RNG, .Cells(i))
End If
Next i
End With
End With
If Not RNG Is Nothing Then RNG.Value = "Vychystáno"
Set RNG = Nothing: Erase H
End Sub

Vzorce vrátia rozdielne hodnoty podľa premiešania dát. A údaje evidentne niesú zoradené. Podarilo sa mi napr na oboch vzorcoch navodiť rovnaké číslo ale iné znamienko, alebo úplne iné číslo. Takže bude presne záležať na tom ako budú vyzerať dáta (alebo čo presne znamenajú), a čo chce excelama dosiahnuť.

RNG je oblasť do ktorej sa bude hromadne vpisovať. Túto oblasť postupne rozširujeme, ale na začiatku nemôžeme zlúčiť cez UNION nič+niečo, ale musíme nastaviť najskôr prvú bunku iba cez SET. Až následné bunky pridáme k RNG cez UNION, pretože už RNG nieje "nič" (Nothing). Nuž ako Vám to inak vysvetlím...

To s tým E2007 neviem posúdiť, mám 2016.

Máte tam With, ale nemáte už bodku pred .Offset ani .Cells (navyše v .Cells chýba to "s" na konci"), netestujete celú oblasť, M nemá žiadny PF teda nemôžete checkovať žiadny FormatConditions, a navyše cez FormatConditions zistíte iba farbu, aká je nastavená v PF, nie či je zobrazená, ... atď.
Teda napr.:
Sub Vychystano()
Dim rdLast As Long, RNG As Range, Bunka As Range
With Worksheets("Dluhy")
rdLast = .Cells(Rows.Count, 1).End(xlUp).Row
For Each Bunka In .Range(.Cells(3, 24), .Cells(rdLast, 24)).Cells
      With Bunka
If .Offset(0, -11).DisplayFormat.Interior.Color = 5296274 Or .Offset(, -10).DisplayFormat.Interior.Color = 5296274 Then
If RNG Is Nothing Then Set RNG = Bunka Else Set RNG = Union(RNG, Bunka)
End If
End With
Next Bunka
End With
If Not RNG Is Nothing Then RNG.Value = "Vychystáno"
Set Bunka = Nothing: Set RNG = Nothing
End Sub

Napr. takto.

-Takže meníte ručne hodnoty v F:I ? Ak ručne, použite metódu Worksheet_Change s kontrolou týchto stĺpcov, kde si vypočítate to isté ako vzorec v C a máte to.
-Nedoťahujú sa napríklad od niekiaľ vzorcom ? Ak vzorcom, použite Worksheet_Calculate, s duplikátom tohto starého listu s pôvodnými hodnotami, porovnajte v cykle alebo pomocou EVALUATE staré hodnoty aby ste zistili zmenu, a vždy uchovávajte pôvodné hodnoty v duplikáte po vykonaní požadovaných operácií.
-S tým súvisí aj to, čo sa má stať s tými, ktoré už pre poslednou odchytenou a verifikovanou zmenou už na 1 boli. Aj tie sa majú poslať ?
-Je tento list sklad ? Podľa mňa nie. Podľa mňa je to objednávka/denný jednorázový odpis/alebo niečo podobné...
-Odkiaľ sa berie hodnota v J (napr. Sklad = 5) ?
-Je zadávaná ručne ? Podľa mňa nie, myslím si že VLOOKUP-om zo skutočného skladu.
-Ak vzorcom, musíte kontrolovať aj ju, lebo má vplyv na vzorec C ZBÝVÁ, ktorého hodnota Vás zaujíma.
-Každú položku chcete riešiť samostatným mailom ? To naozaj ?
-Teda keď sa naraz zmení 5 hodnôt na 1, šéf dostane 5 mailov alebo jeden s 5 riadkami ? Podľa mňa je 2. možnosť lepšia.
-Čo potom s týmto listom ? Vymazať a zapísať do Skladu nové zostatky z C ?
...

Tých otázok je veľa, a nedajú sa ani jednoznačne položiť, pretože sú previazané odpoveďami, ktoré ale nedávate. Zoberte si každú moju otázku a skúste nájsť na všetky Vašu odpoveď. My vieme, že chcete odrátať 5-4=1, ale nevieme čo spôsobuje zmenu čísel 5 a 4. My vieme že 4 vzniká súčtom buniek, ale čo spôsobuje zmenu tých buniek ? Vy klávesnicou ? Vzorec ? Makro ? Dotaz ? Riešenie sa totálne líši.

No mne to skôr pripadne takto:
-je jedno v akom riadku stĺpca A (doteraz ukazovalo iba 5 riadkov)
-môže byť vyššia súvislá oblasť (doteraz iba 1 bunka)
-najskôr sa zistí, či v zmenenej oblasti sú 0
-zistí sa pozícia prvej 0 v zmenenej oblasti, a uloží sa artikel (pre neskoršie označenie)
-zoradí sa (aby 0 boli za sebou)
-označia sa a odošlú
-označí sa prvá z 0, ktoré boli naposledy pridané, pozícia v zoradených sa zistí podľa čísla artiklu

Ak som vedľa tak nič...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Art As String, R As Long
  If Target.Column = 1 Then
    On Error Resume Next
    R = WorksheetFunction.Match(0, Target, 0)
    On Error GoTo 0
    If R > 0 Then
      Art = Target.Cells(R).Offset(, 2).Value2
      With Cells(2, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 4)
        .Sort Key1:=Cells(2, 1)
        Cells(1, 1).Resize(WorksheetFunction.CountIf(.Columns(1), 0) + 1, 4).Select
        Call Send_Range
        .Columns(3).Find(What:=Art, LookIn:=xlValues).Offset(, -2).Select
      End With
    End If
  End If
End Sub

Sub Send_Range()
  ActiveWorkbook.EnvelopeVisible = True
  With ActiveSheet.MailEnvelope
    .Introduction = "This is a sample worksheet."
    .Item.To = "elninoslov@gmail.com"
    .Item.Subject = "My subject"
    .Item.Send
  End With
End Sub

Makrá sú hrozné, ale tie sa dajú ľahko upraviť. Logika je problém. Nerozumiem tam veľa veciam. Napr.
-prečo sa musia neustále prekopírovávať rovnaké údaje?
-odkiaľ sa berú stĺpce F:AF v Sklad? Ako k nim prichádzate?
-to sú Ks na iných skladoch?
-Ako dospejete k "Pozícia na vymazanie" v stĺpci AH?
-Keď je v stĺpci AH označený iný sklad (alebo čo to je), má sa riadok zmazať?
-Ako riešite pridanie novej položky na sklad? Normálne ako "Príjem" v Pohyby? To nieje možné kvôli neexistencii PLU. To pridávate do ZDROJ ručne?
-Čo znamená počiatočný/konečný stav ?
-Načo je vôbec v celom zošite toľko čudlíkov ? Nestačí 1 na to aby aktualizoval sklad na základe vyplnenia Pohyby, zapísal pohyby do Archívu, vymazal kompletne vyskladnené položky zo skladu, a zároveň pripravil Report, všetko jedným čudlíkom ?
...

Ach jaj. No posnažte sa ešte. Obrázok je iný ako "príloha". Z "prílohy" osobne neviem kde a ako sa zadávajú aké údaje, a kde sa má počítať a zobraziť zvyšok. V prílohe nieje nič, ani len makro nieje vo VBA ale v bunkách, chýba Sklad, nevieme ako sa do skladu zadávajú +-. Ten list čo tam je je čo ?
Zadávanie objednávky ? Sklad ? Medzivýpočet ? Pre riešenie je podstatné, to na čo som sa pýtal, ako máte riešenú tú zmenu skladu, odkiaľ, čo, kam, kedy. Táto "tabuľka" na tú otázku žiaľ neodpovedá. Osobne Vám takto pomôcť fakt neviem. Málo podstatných info...
Aby Vám niekto pomohol, musíte mu dať kompletný súbor informácií, nie útržok z kontextu.

Prílohou som myslel súbor Excelu s príkladom ako funguje ten zošit. Nie obrázok.
Môžete to mať urobené niekoľkými spôsobmi, napr. Máte list Objednávka, a list Sklad. Do objednávka vkladáte matroš a počet, stlačíte čudlík, a vykoná sa odpis položiek v liste Sklad prepísaním počtu, list objednávka sa zaeviduje a zmaže.
Alebo môžete pod seba do "nekonečna" v liste Sklad vpisovať všetky pohyby, a napr cez KT na inom liste napr Stav, mať vypísaný aktuálny stav skladu.
...atď...

Na toto som sa pýtal, že ako je to urobené a podľa toho by sa šilo riešenie. To súvisí s prvým bodom - príloha (súbor Excelu) s dátami, ktoré môžete zmeniť za nefiremné, ale konštrukciu a formát ponechajte.


Strana:  1 ... « předchozí  186 187 188 189 190 191 192 193 194   další » ... 298

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