Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  142 143 144 145 146 147 148 149 150   další » ... 286

Áno, zabudol som na posun, doplnte si vyznačenú časť do daného riadku:
sOblast = sOblast & .Range(AdrP(i)).Offset(, -1).Resize(47, 9).Address & " "

No ja neviem, musíte tam mať určite tie zlúčené bunky? Ak nie, tak v pohode bez makra Rozšíreným filtrom v objekte Tabuľka - ukážka v Hárok1. V Hárok 2 je +- nejaký návrh na makro.

Excel Vám to moje predošlé makro nezobral asi len kvôli tomu, že pri kopírovaní z fóra vkladá medzery medzi riadky. A zložený príkaz nesmie mať v sebe prázdne riadky. Stačilo odstrániť medzery.

Každopádne, tu je ďalší návrh s malým rozdielom číslovania príloh, ale tentoraz som použil malý cyklus, ktorý bude možno pochopiteľnejší. Prílohy budú očíslované v zadanom poradí, len sa vytlačia v poradí, ako idú pod sebou. Ale čísla budú mať aké im určíte Vy.

Stále trváte na tom, že sú oblasti rovnaké ? Poriadne sa pozrite na "A191:I232" vs "A191:I234" pre rovnakú prílohu. Detto v poslednej prílohe.
Ďalej prvá príloha je o riadok vyššia, ale budiš, nevadí.

Nečítal som všetko, ani nepozeral pridané riešenia, tak snáď neduplikujem.

Ak to ani takto nevyhovuje, tak potom (možno to tu už je) tlačte po jednotlivých prílohách pomocou cyklu. Prvá tlač tie 2 hlavné strany, druhá samostatná tlač bude prvá zvolená príloha, tretia samostatná tlač bude druhá zvolená príloha, atď. Kliknete rovnako iba raz na tlačítko, akurát nebudete mať ten Preview. Aj to je možnosť.

Sub Tisk()
Dim sOblast As String, AdrP, i As Byte

With ThisWorkbook.ActiveSheet
AdrP = Split("B96,B144,B191,B238", ",")
sOblast = "$A$1:$I$95 "
For i = 0 To 3
If IsNumeric(.Range(AdrP(i)).Value) Then
sOblast = sOblast & .Range(AdrP(i)).Offset(, -1).Resize(47, 9).Address & " "
End If
Next i
sOblast = Replace(WorksheetFunction.Trim(sOblast), " ", ",")
.PageSetup.PrintArea = sOblast
.PrintOut Preview:=True
End With
End Sub

Ak to robia aj iné programy, natiahnite všetky aktualizácie Win a aktualizujte hlavne ovládač tlačiarne. Ak to robí iba Excel, aktualizujte Office a zároveň aj tlačiareň.

Iný PC či notebook na tú tlačiareň ste neskúšal ?

V Preferenciách tlačiarne (nie v nastavení tlače v Exceli, ale priamo ovládač tlačiarne) nieje možnosť nejako zamknúť otáčanie ?

Tak ma napadá ešte takéto nematicové riešenie, ktoré nemá problém s vynechaním detských porcií a ráta ich podľa požiadavky, rovnako ako to maticové riešenie.
=SUMPRODUCT(INT(--SUBSTITUTE(A2:A4;"/";",")))&"/"&IFERROR(--REPLACE(SUMPRODUCT(--SUBSTITUTE(A2:A4;"/";",")-INT(--SUBSTITUTE(A2:A4;"/";",")));1;2;"");0)
=SOUČIN.SKALÁRNÍ(CELÁ.ČÁST(--DOSADIT(A2:A4;"/";",")))&"/"&IFERROR(--NAHRADIT(SOUČIN.SKALÁRNÍ(--DOSADIT(A2:A4;"/";",")-CELÁ.ČÁST(--DOSADIT(A2:A4;"/";",")));1;2;"");0)

Mepexg, neviem ako to myslíte, ale nepočíta Vám to správne detské porcie. Pri 4/2, 1/2, 2/2 má dať 6 detských, ale Vám dá 2. No a ak detské raz vynecháme 4/2, 1, 2/2 tak má dať 4 detské, Vám dá chybu.

Napríklad takto. Maticový vzorec:
=SUM(IFERROR(LEFT(A2:A4;FIND("/";A2:A4)-1)*1;A2:A4*1))&"/"&SUM(IFERROR(MID(A2:A4;FIND("/";A2:A4)+1;LEN(A2:A4))*1;0))
=SUMA(IFERROR(ZLEVA(A2:A4;NAJÍT("/";A2:A4)-1)*1;A2:A4*1))&"/"&SUMA(IFERROR(ČÁST(A2:A4;NAJÍT("/";A2:A4)+1;DÉLKA(A2:A4))*1;0))

Dobre teda, ako myslíte. Ale nemôžete čakať, že budeme hádať a dotazovať sa vylučovacou metódou na to čo chcete, kde čo a prečo máte, a či je to vhodné riešenie toho čo chcete. Koľko by Vám asi trvalo z Vašeho firemného súboru urobiť súbor rovnako vyzerajúci, ale s vymyslenými hodnotami "123456" a "bla bla bla" ? A potom si skúste tipnúť, koľko času asi nám bude trvať, kým si správne tipneme tie isté veci.

Napíšte presne adresy všetkých buniek, v ktorých sa nachádzajú informácie o číslach príloh. Určite sú to bunky B96, B144, B191, B238 ?

Oblasti príloh sú A96:I143, A144:I187, A191:I232 (pri voľbe 4 má byť iná ? A191:I234), A238:I282 (pri voľbe 4 má byť iná ? A238:I283) ?

Požadujete poprehadzované poradie ? Teda napr. najskôr A96:I143, potom A238:I283, a až potom napr. A144:I187 ?

Počet strán na každú z príloh je rovnaký ? Teda napr. čo príloha to 1 strana ? Máte tam zlomy strán ?

Vždy sa jedná o presne rovnaké rozloženie tej prvej časti aj príloh ? Teda nemení sa počet riadkov (to asi nie) a ani výška riadkov ?

Medzi niektorými prílohami sú medzery ?

...

Toto je bez prílohy veľmi zle. Skrátená verzia, čistý tip, lebo z popisu ani kódu mi nieje jasné čo chcete, čo je kde umiestnené, čo sa má na základe čoho a odkiaľ brať do úvahy.
Sub Tisk()
Dim sOblast As String
With ThisWorkbook.ActiveSheet
sOblast = Replace(WorksheetFunction.Trim("$A$1:$I$95 " & _
IIf(.Range("B96").Value > 0, "A96:I143 ", "") & _
IIf(.Range("B144").Value > 0, "A144:I187 ", "") & _
IIf(.Range("B191").Value > 0, "A191:I232 ", "") & _
IIf(.Range("B238").Value > 0, "A238:I282 ", "")), " ", ",")
.PageSetup.PrintArea = sOblast
.PrintOut Preview:=True
End With
End Sub

Vložte celú prílohu, kde bude vidieť dáta, vymyslené, ale reálno vyzerajúce, v rovnakom množstve, rovnakého formátu, rovnako umiestnené ako používate. A pridajte nejaký iný popis a konkrétny príklad, čo sa má stať ak tuto bude toto a hentam tamto, tak potom sa to tuto poondie a totohľa potentuje, a totok je výsledok :)

@ marjankaj : bez toho "=" v strede vzorca :)
@ Radek-Klepacek : pochybujem, že to chcete takto. V "Zatížení kapacit" má byť v H6:H18 rovnaký vzorec ? Bude dávať rovnaký výsledok. Nechcete náhodou nejako (ale podľa dát v "LASER" neviem ako) identifikovať a počítať SUMIFS pre každé "Středisko (název)." ? Inak mi to nedáva zmysel. Jedine, že by každý riadok rátal iný list. To ale vylučuje to, že máte v H6 odkaz na list LASER a zároveň na list LASER požadujete vzorec v dotaze do H7...

Na toľko 90-znakových častí, na koľko stĺpcov si natiahnete vzorec. Pre zjednodušenie prípadných úprav či pre menšiu výpočtovú náročnosť by bolo vhodné použiť pomocný stĺpec ako v 2 hárku.

2 rôzne návrhy. Zapnite si prípadne, ak chcete naozaj tie listy odkrývať, lebo na vytiahnutie dát to nieje potrebné.
A napadol ma ďalší návrh, keď by sa aktualizovali nie hodnoty, ale vzorce, ktoré by udržovali stále aktuálne hodnoty v daných listoch. Riešení je veľa. Dáta som si vymyslel.

Ukážte ten "iný zošit". Akú hodnotu má "k", "Stlpcov", a Ubound(v,2) ?
Ďalej nad tým je
With .Range(.Cells(Rows.Count, 4).End(xlUp), .Cells(4, 10))
Teda hľadá posledný vyplnený riadok, aby mohol zmazať predošlé výsledky. Je to v novom zošite rovnako umiestnené ako v tom čo ste dal ?
Nezasahuje to do zlúčenej bunky (ako v predošlom Vašom súbore, tam som zlúčenie zrušil) ?
...

Vypĺňanie buniek po jednej je pomalé. Použitie poľa to skráti na zlomok.

Problém pri 3 prevodových stupňoch je pravdepodobne prekročenie limitu riadkov v Exceli. Určite potrebujete všetky tieto cykly ? Spočítal ste si koľko je to cyklov ? Je to 13 107 200 000. Doba výpočtu je ohromná. Určite musí byť každý cyklus od 20 do 100 ? Treba nájsť iný spôsob výpočtu toho čo potrebujete ako výsledok. Lebo mne sa nezdá, že by ste potreboval spleť čísel vo viac ako milión riadkoch v 7 stĺpcoch, a celé počítané v 13 miliardách cyklov.
Výpočet "i" je určite správny ? Lebo je to :
(podriadený cyklus / nadriadený cyklus) * (podriadený cyklus / nadriadený cyklus) * (nadriadený cyklus / podriadený cyklus)
Nemá byť tretia dvojica opačne ?

Snáď Vám pomôže nejaký matematik ... 1

Problém bude v deklarácii API funkcií. Ale je to často zamotané, lebo treba zistiť na nete ktorá API používa parametre akých typov. Od VBA7 (2010) sa používa PtrSafe, dovtedy pre VBA6 nie. Potom sa parametre líšia podľa 32/64 bit Long vs LongLong, ktoré by mala ale v nových Officoch zastrešiť LongPtr obidve. Problém ale je, že niektoré API stále používajú pre parametre Long aj na 64-bitoch. Potom je to nestabilné. Preto treba dohľadať konkrétne tieto Vami použité deklarácie všetkých API, a zapísať ich pomocou podmienenej deklarácie.
#if Vba7 then
' Code is running in the new VBA7 editor
#if Win64 then
' Code is running in 64-bit version of Microsoft Office
#else
' Code is running in 32-bit version of Microsoft Office
#end if
#else
' Code is running in VBA version 6 or earlier
#end if

#If Vba7 Then
Declare PtrSafe Sub...
#Else
Declare Sub...
#EndIf

Link od MS

Aha. No ak je to tak, tak potom nie použiť StrComp(), ale definovať si reťazec českých znakov UCASE(), a použiť InStr(). Ale zatiaľ to prerábať nebudem, počkám na vyjadrenie Raptora-22.


Strana:  1 ... « předchozí  142 143 144 145 146 147 148 149 150   další » ... 286

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