My tie podmienky ale nepoznáme, tak si ich tam doplnte. Myslím, že kód je pochopiteľný. V premennej H1 je hodnota z bunky D1, a v premennej H2 je pole hodnôt z buniek B2:B9 zostavené podľa indexov:
H2(1,1) = hodnota bunky B2
H2(2,1) = hodnota bunky B3
H2(3,1) = hodnota bunky B4
H2(4,1) = hodnota bunky B5
H2(5,1) = hodnota bunky B6
H2(6,1) = hodnota bunky B7
H2(7,1) = hodnota bunky B8
H2(8,1) = hodnota bunky B9
Za "Case X:" - kde "X" je číslo z D1, si vždy urobte čo sa má pri tejto hodnote "X" stať.
Teda tie Vaše tajuplné podmienky si už zvládnete urobiť. (alebo dodajte presné inštrukcie pre každú kombináciu)
Ja som urobil len len pre D1=1 a D1=2, aj to som si tipol ...
PS: A ešte som zabudol, že stĺpec F v List2, je schovaný. Sú v ňom odkazy na "riadiace bunky" - bunky spúšťajúce Calculate. Pretože samotná zmena napr. bunky D1 nevyvolá Calculate, ale ak je niekde odkaz "=D1", tak to už Calculate vyvolá.
Môžete použiť aj Calculate, ale musíte niekde v liste načítať hodnotu zo zmenených buniek, a toto načítanie skryť (napr v stĺpci určenom iba na to, najlepší by bol stĺpec A a všetko ostatné posunúť).
Máte tam obe metódy, ale Change je teraz odstavená, je premenovaná, číslo 1 v názve. Teda teraz je to len cez to Calculate.
Niečo si vyberte...
Asi by som to urobil cez Change, nie cez Calculate:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim H1, H2
If Not Intersect(Target, Union(Range("D1"), Range("B2"))) Is Nothing Then
H1 = Range("D1")
If H1 <> "" Then
Application.EnableEvents = False
H2 = Range("B2")
Call Skrývání_sloupců_a_řádků(H1, H2)
Application.EnableEvents = True
End If
End If
End Sub
Private Sub Skrývání_sloupců_a_řádků(H1, H2)
With Sheets(4)
If H1 = 1 Then
.Rows(1).Hidden = True
.Rows(2).Hidden = False
.Columns(2).Hidden = False
Else
If H1 = 2 Then
.Rows(1).Hidden = False
.Rows(2).Hidden = True
.Columns(2).Hidden = (H2 = True)
End If
End If
End With
End Sub
Spojte si to ako píše kolega, alebo môžete hodnotu vyhľadať inak. Môžete použiť aj niečo z tohoto. Máte tam urobené jedinečné zoznamy stredísk a zoznam im náležiacich účtov na výber. Výberový zoznam Vám teda neumožní zadať nesprávne dáta. Ak výberové zoznamy nechcete, bude jednoduchšie použiť to čo radí kolega.
Tak ich preveďte na hodnoty napr.
.Range("nejaká oblasť").Value = .Range("nejaká oblasť").Value
Premenujte si tlačítko napr takto:
Domov - Nájsť a vybrať - Tabla výberu - 2 krát klik (nie dvojklik) na názov tlačítka, a premenujte ho, Enter. Tento názov potom dajte aj do makra.
Malo by Vám to fungovať.
Tak skúste toto, na viac nemám čas.
Záleží len na tom, čo si predstavujete pod pojmom "připíší k políčku ,,B1,,".
Toto veru bez makra nepôjde. Takže takto.
Tak takto ?
Nespomínate v zadaní, že sa nemá vyhodnocovať MIN ak je priemer pod 20, ale pritom to máte naznačené farbami. Tak si ten druhý vzorček pre MIN prípadne upravte rovnako ako obmedzenie pri MAX.
Napíšte nám, čo majú tie "súčty" počítať, a čo znamená "aby ten řádek se součty byl vždy ten poslední ?" ?. Tie súčty sú mimo Tabuľky, a Vy chcete aby boli stále mimo Tabuľky v tých stĺpcoch kde sú, ale za posledným zaplneným riadkom Tabuľky ? Alebo chcete aby boli tie súčty pod Tabuľkou za posledným zaplneným riadkom Tabuľky ?
Niekedy 3 niekedy 5 ... o tom ste tuším nikde nepísal, ani o tom, že nemôže byť pomocný výpočet, a že ste to tak skúšal a nevyhovuje. To ste mohol povedať, nech sa človek zbytočne nesnaží.
Nedostatok podstatných informácií ... aj keď v popise toho máte dosť, veľa podstatného tam nieje.
Takže môj posledný návrh:
Keď chcete meniť počet, musíte poprehadzovať stĺpce, aby sa mali kam dynamicky posúvať dátové (výstupové) stĺpce, ktorých počet meníte.
To žiaľ nejde len tak vysvetliť. Musíte si sám preštudovať ako vzorce, tak makro. Najlepšie cez "Vyhodnotiť vzorec" a v makre krokovaním makra cez F8.
Aj keď Vám urobím popis makra, tak to bez aspoň akých takých znalostí programovania nepoberiete.
Princíp je asi takýto:
-Tým, že sú zostavy Tabuľky (nie tabuľky), môžeme ich jednoducho nájsť, včetne ich polohy.
-Je tam jedna naprogramovaná funkcia, ktorá prejde všetky tabuľky, a vyhľadá v nich daný matroš. Takto spočíta požadované množstvo daného matrošu vo všetkých zostavách. Toto číslo je potrebné na predikovanie stavu skladu pred stlačením Odečti. Túto funkciu použije každý riadok každej zostavy.
-Na základe názvu matrošu sa nájde na sklade položka a urobí sa odpočet, opäť sa prehľadajú všetky Tabuľky zostáv jednoducho, lebo sú očíslované (Excel si ich indexuje sám, preto ich môžete pridávať a uberať)
-Tým že poznáme polohu každej Tabuľky - zostavy napr. pomocou jej vlastnosti .Range, tak si ľahko prečítame potrebný počet na výrobu z bunky nad zostavou.
...
To ale nejde takto vysvetľovať...
No tak si to jednoducho spočítajte v jednej bunke.
Takto ???
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.