Označíte kód v editore príspevkov myšou a stlačíte to tlačítko $. Označený text dostane Tagy na začiatku a konci.
Ak budete potrebovať pomoc ohľadom tejto témy balíkov, tak píšte sem, ak ohľadom nejakej inej Excel témy, tak vytvorte novú, rovnakým spôsobom ako túto. Treba ale aj skúsiť vyhĺadávanie, či sa požadovaný problém už niekde nevyriešil. Aj tento balíkovy prob. tu už niekde je.
Štúdium 4K riadkov nepopísaného duplicitného kódu je minimálne za 1-5 natvrdo. V blázninci. :)
Pozerám v rýchlosti na ten formulár ... ktorý z tých 4 "listboxov" (asi myslíte tých textboxov) máte na mysli ? Tri by mohli byť asi zváranie/brúsenie/práca a čo ten 4. skrytý ? Sú neotitulkované. Ten list "data_prace" je "celková databáza" alebo iba "prepis aktuálneho formu" ? Ak iba prepis, použite Application.WorksheetFunction.SumIf. Ak je to celková DB tak cyklus v ktorom prejdete Me.Controls a nájdete všetky Visible objekty s daným názvom a spustíte ho klikom na "Ďalší", alebo si ukladajte hodnoty z aktuálneho formu do zvláštneho listu a použite 1. navrhovanú metódu.
Ten kód by sa mal ale zredukovať, lebo takto je veeeľmi neprehľadný a ťažko upraviteľný. Možno by stálo za zváženie radšej vytvárať objekty dynamicky podľa potreby a volať jednu metódu pre všetky (s parametrom názvu či typu a čísla) objekty v riadkoch rovnakého zamerania.
Trochu viac to popíšte, možno sa niekto chytí, mne sa popravde už nechce. :(
EDIT: Ešte ma napadla triviálnosť. Veď stačí pri prechode na ďalší riadok pripočítať hodnotu k celkovej. Nie som pri PC a nevie názvy textboxov, ale priklad:
tbCelkomZvar.Text = CStr(Val(tbCelkomZvar.Text) + Val(tbZvar1.Text))
Otestujte. Ten zbytkový sa pýta na množstvo naviac, ktoré je považované ešte za také, aké sa dá pripočítať k poslednému balíku. Teda ak zadáte množstvo 211, balík 100, zbytok 20, tak dostanete balíky 100+111, ale by ste zadal zbytok iba 10, tak dostanete balíky 100+100+11
Private Sub CommandButton21_Click()
Dim i, balik As Long
Dim adresa As String
Dim naklad As Long
Dim celychbaliku As Long
Dim poslednibalik As Long
Dim baliku As Long
Dim jezbytkovy As Boolean, zbytek As Long
EnvironConst1 = Environ("UserName")
naklad = InputBox("zadej náklad")
balik = InputBox("zadej velikost v balíku")
zbytek = InputBox("zadej zbytkové množství v balíku")
adresa = InputBox("zadej adresu")
celychbaliku = naklad / balik
poslednibalik = (naklad Mod balik)
jezbytkovy = zbytek <> 0 And poslednibalik > 0 And poslednibalik <= zbytek
baliku = celychbaliku + ((Not jezbytkovy And poslednibalik > 0) And 1)
Cells(29, 4) = naklad
Cells(12, 2) = adresa
For i = 1 To baliku
Cells(30, 2) = i & "/" & baliku
If i * balik <= naklad Then Cells(29, 2) = balik + IIf(jezbytkovy And i = baliku, poslednibalik, 0) Else Cells(29, 2) = poslednibalik
ActiveSheet.PageSetup.CenterFooter = ("&B&8 strany: " & i & " / " & baliku)
ActiveSheet.PageSetup.LeftFooter = ("&B&8Uživatel: " & EnvironConst1)
''********* vloží do patičky listu - do levého oddílu ****&B&12 - font tučné velikost 8
'ActiveWindow.SelectedSheets.PrintOut ´******************Tisk na předvolenou
ActiveSheet.PrintOut Preview:=True '********************Ukázka před tiskem
Next i
End Sub
Mne to zadávanie ale nieje po chuti, a viac by sa mi páčilo ošetrenie chýb na nezadané čísla a ošetrenie vloženia znakov (nečísel), a ja by som si to urobil cez formulár, kde by boli zadávané hodnoty pekne pod sebou, a hlavne dalo by sa to pred tlačou ešte zrušiť, atď...
Skôr ako začnem študovať kód, ujasnite si túto vetu
Jak ale dám náklad třeba 211 ks a balík 200 ks dostanu 3 balíky 2x100 a jeden 11 ks ( mají býd jen 2 1x 100 a 1x 11ks)
Totóók ? Či ?
Máte na mysli takéto niečo ?
Tento vzorec si dajte do D3 a pretiahnite ho až po D16.
=IFERROR(VLOOKUP(A3;'stary cennik'!$A$3:$C$14;3;FALSE);"")
=CHYBHODN(SVYHLEDAT(A3;'stary cennik'!$A$3:$C$14;3;NEPRAVDA);"")
EDIT: A ak chcete potom list "stary cennik" vymazať, tak samozrejme najskôr prehodte vzorce na hodnoty. Teda nap. označte D3:D16, stlačte Ctrl+C, kliknite pravým do oblasti a vyberte Vložiť hodnoty (ikonka s 123). Až potom mažte list.
Áno, to len, že treba sledovať stav zainteresovaných premenných ...
Pole JMFSE(32) má indexy od 0 do 32, nie od 1 do 32 ako ich voláte v cykle.
To pole JMFSE() má určite názvy, ktoré zodpovedajú reálnym súborom ?
PL nepresahuje hodnotu 32 ?
Dajte si do Watches premennú "i", "PL", "ERR", "JMFSE(i)", "MVPT" a krokujte makro.
Mne pri zachovaní toho, že pole JMFSE() má korektné názvy a PL nepresiahne počet názvov a zároveň hodnotu 32, to ide OK.
Akurát by som vypol ScreenUpdate a odstránil Select
S = Sheets(M).Range("B4:U199")
prípadne si ešte skúste celý kód obalit do On Error Goto CHYBA
a v časti CHYBA si BrakePointnite napr MsgBox alebo čo, aby Vám to stoplo, a pozrite si hodnoty zainteresovaných premenných.
Skúste či je to OK. Doplnte si do grafu napr legendu a pod.
Neviem či som zle opísal ja Vaše čísla alebo čo, lebo mi dáva iný celkový priemer.
Skúste
ActiveX ComboBox ?
Na dvoch miestach je treba zmeniť absolútne adresovanie na relatívne. Som zvedavý či to nájdete. Teraz je to tak, že len pretiahnete bunky
Ako na to ? Ako píšem, možností je viac, MATCH/POZVYHLEDAT + INDEX, OFFSET/POSUN, INDIRECT/NEPŘÍMÝ_ODKAZ, CHOOSE/ZVOLIT, plnedynamický, polodynamický, statický, ...
Tento konkrétny príklad je polodynamický, teda napevno daný počet zoznamov, ale zoznamy môžu byť dynamicky dlhé.
-Je tam jeden vzorec v Definovaných názvoch, ktorý vyhľadá v prvom riadku listu Zoznam, na ktorom mieste sa nachádza zoznam podľa prvého výberu, a potom spočíta koľko je tam od druhého riadku po koniec zaplnených možností. A tieto potom číta druhý zoznam.
-Tieto zoznamy sú vložené cez Overenie dát
-Ako doplnok pre zvýraznenie, že sa v druhej bunke nachádza stále hodnota z predošlého zoznamu (pri zmene prvého zoznamu), je nastavené) Podmienené formátovanie.
Čo viac k tomu povedať. Ak nepotrebujete dynamický počet položiek, tak sa to dá nastaviť inak.
Viacero možností, napr. :
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.