Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  271 272 273 274 275 276 277 278 279   další » ... 289

Áno, ja som si to všimol, hneď ako som to odoslal, preto som to hneď zmazal, a posielam správnu verziu.
Urobil som Vám vzorce rovno do tabuliek. Mohli ste to dopísať do predošlého vlákna.

No to som aj čakal, že nenapíšete žiadne podrobnosti, ani nedáte prílohu s reálnymi dátami, počtom stĺpcov, typom dát rozložením v listoch a pod.
No nič, 3 x som preleštil moju ošúchanú krištáľovú guľu, vypil 2 čarovné nápoje so žabacieho slizu, prehltol netopiera , o ostatných rituáloch ani nehovorím radšej, ... a navrhol som Vám riešenie. Žiaľ bez udania podrobností Vám to nedokončím, musí to byť na mieru.
Ešte treba zinteligentniť zadávanie filtra, pretože tento predpokladám ovládať vedieť nebudete. Funguje tak, že pre každý stĺpec dát nadefinujete podmienku (>30, <50, lenže napr. prázdny dátum musíte nadefinovať ="="&""), vedľa seba je AND, pod sebou je OR.

Čo sa týka toho obnovovania, v reálnom čase to nieje príliš reálne. Hlavne ak máte množstvo listov s množstvom riadkov. Takže som to nastavil tak, že sa filter vypočíta keď sa prepnete na list Filter, alebo ak zmeníte filter.

Tu máte spojenie tabuliek makrom, a buď si dorobíte filtrovanie podľa tých tajných podmienok, alebo nám ich prezradíte spolu s druhmi, typmi, počtom údajov, a mi Vám pomôžeme to urobiť.
Počet tých tabuliek je nemenný? Počet riadkov v tabuľkách je nemenný ? Dajte prílohu.

No teda! Aspoň k niečomu funkčnému sme sa spoločne dobrali.

Ak si nebudete vedieť s niečim rady, kľudne napíšte aj do tohto vlákna, aj keď sa to nebude týkať priamo odkazov na listy, ako je v názve. Ale aspoň budeme vedieť o čo ide. Nebojte, nikto spoza klávesnice nekúše.

Nekúše ??? 5

Robíte 2 základné chyby.
1. Základná chyba : Vy tam máte v bunkách hodnotu, ktorá je ČÍSLO. V Exceli keď sa odkazujete na Sheets, tak táto funkcia Sheets (alebo Worksheets) je tzv. Preťažená. To znamená, že jej parameter môže mať rôzny typ, a podľa toho aký typ má, taký typ funkcie sa vykoná. Vy keď máte teda v bunke číslo, a pošlete ho ako parameter do funkcie Sheets, ona zistí še sa jedná o číslo, tak to považuje za INDEX ! A list s takýmto indexom samozrejme neezistuje. Vy potrebujete použiť tú druhú preťaženú funkciu Sheets, ktorá očakáva identifikátor ako TEXT, pretože názov listu je text. Toto rieši problém s odkazom - pretypovanie čísla na text.
On Error Resume Next
Sheets(CStr(Cells(1, 1).Value)).Activate
If Err <> 0 Then MsgBox ("List neexistuje." & vbNewLine & Cells(1, 1).Value)
On Error GoTo 0

2. Základná chyba : Je ešte väčšia ako prvá. Nehnevajte sa na mňa, vy vôbec nečítate, čo Vám píšem. A vôbec neodpovedáte na to čo sa pýtam. Prosil som Vás o presný podrobný popis toho čo sa bude diať a čo očakávate aby sa stalo. Dokonca som Vám dal aj príklad ako si predstavujem ten popis. Ja viem že je to účtenka, ale chcel som od Vás dostať informácie, kam sa zapisuje nové číslo účtenky (alebo sa nazapisuje, vytvára sa), kam sa ukladá posledné číslo. Čo sa ukladá/číta do/z tých prázdnych buniek v kóde. Pri každom vytvorení novej účtenky sa vytvorí aj nové tlačítko ? Odkiaľ sa budú brať názvy tlačítok ? Kde chcete ukladať, ktorý list (účtenka) patrí ktorému tlačítku ? Tie tlačítka a listy sa už nikdy mazať/meniť nebudú? Budú sa kopírovať aj iné bunky na nové listy? Nemôžete dať ako príklad súbor, kde uvediete jedno číslo, zlý kód, prázdne strany, žiadne informácie o fungovaní, a čakať, že Vám niekto pomôže. Ako vidíte, snaha o pomoc je, inak by som nenapísal 4x toľko čo Vy (a to má byť opačne). Dajte si kľudne aj hodinu čas na popísanie toho čo chcete. Ja som venoval premýšľaniu o tom čo asi tak chcete celým zošitom dosiahnuť o dosť viac.

A nebojte sa dať viac vyplnenú prílohu. Firemné tajné data prepíšte vymyslenými (aj z inej oblasti), čísla zákazok prepíšte tiež, služby/tovar si vymyslite. To nemôže byť predsa problém, vymyslieť si údaje na jednom liste "start" a jednom či dvoch listoch s účtenkami.

PS: Myslite stále na to, že aj tento môj kvázi-kritický príspevok, je iba snaha Vám pomôcť 1

Toto vôbec nepoužívam, naozaj je tam možnosť nastaviť formátovanie tak ako Anonym che ? Mne z toho totiž vyplýva, že on chce napr. bunku L28 okrášliť šípkou nahor v prípade, ak sa hodnota tejto bunky zväčšila oproti predchádzajúcej hodnote tejto bunky o 25% (a viac). Netuším, kde to formátovanie bude brať pôvodnú hodnotu tejto bunky. Ale možno to Excel zvláda ľavou zadnou. Ja to nepoužívam, tak neviem. Tak mi treba 1

Trošičku inak

EDIT: A pridávam ešte, ak by bolo potrebné, aj jedno z riešení vo VBA:
Function GetLog(Log As String, Param As String) As Long
Select Case Param
Case "l": GetLog = Evaluate("=VALUE(MID(""" & Log & """,7,FIND(""_ratio:"",""" & Log & """)-7))")
Case "r": GetLog = Evaluate("=VALUE(MID(""" & Log & """,FIND(""_ratio:"",""" & Log & """)+7,FIND(""_fix"",""" & Log & """)-(FIND(""_ratio:"",""" & Log & """)+7)))")
Case "f": GetLog = Evaluate("=VALUE(MID(""" & Log & """,FIND(""_fix:"",""" & Log & """)+5,FIND(""_adjust"",""" & Log & """)-(FIND(""_fix:"",""" & Log & """)+5)))")
Case "a": GetLog = Evaluate("=VALUE(RIGHT(""" & Log & """,LEN(""" & Log & """)-(FIND(""_adjust:"",""" & Log & """)+7)))")
End Select
End Function

A príklad použitia:
Sub Vysledok()
Dim s As String, hLimit As Long, hRatio As Long, hFix As Long, hAdjust As Long
s = "limit:999_ratio:0_fix:0_adjust:1"
hLimit = GetLog(s, "l")
hRatio = GetLog(s, "r")
hFix = GetLog(s, "f")
hAdjust = GetLog(s, "a")
MsgBox (hLimit & vbNewLine & hRatio & vbNewLine & hFix & vbNewLine & hAdjust)
End Sub


Ešte jeden iný spôsob ako to isté dosiahnuť:
Function GetLog(Log As String, Param As String) As Long
Dim SL() As String
SL = Split(Log, ":")
Select Case Param
Case "l": GetLog = CLng(Left(SL(1), InStr(1, SL(1), "_") - 1))
Case "r": GetLog = CLng(Left(SL(2), InStr(1, SL(2), "_") - 1))
Case "f": GetLog = CLng(Left(SL(3), InStr(1, SL(3), "_") - 1))
Case "a": GetLog = CLng(SL(4))
End Select
End Function


Ešte kratšie
Function GetLog(Log As String, Param As String) As Long
Dim SL() As String
SL = Split(Log, ":")
Select Case Param
Case "l", "r", "f": GetLog = CLng(Left(SL(InStr(1, "lrf", Param)), InStr(1, SL(InStr(1, "lrf", Param)), "_") - 1))
Case "a": GetLog = CLng(SL(4))
End Select
End Function

Dalo by sa ešte kratšie, posledný HardCore :
Function GetLog(Log As String, Param As String) As Long
If Param = "a" Then GetLog = CLng(Split(Log, ":")(4)) Else GetLog = CLng(Left(Split(Log, ":")(InStr(1, "lrf", Param)), InStr(1, Split(Log, ":")(InStr(1, "lrf", Param)), "_") - 1))
End Function

Ak môže byť Param číslo (číslo parametru 1=limit ...) tek
Function GetLog(Log As String, Param As Byte) As Long
If Param = 4 Then GetLog = CLng(Split(Log, ":")(4)) Else GetLog = CLng(Left(Split(Log, ":")(Param), InStr(1, Split(Log, ":")(Param), "_") - 1))
End Function

Škoda že to nežerie IIf(...) bolo by to ešte o pár znakov kratšie. Ak to má byť ale používané mnoho krát, tak tieto krátke sú nevýhodné, lebo Split robia viackrát.

Maličká úprava na začiatku algoritmu, plus ešte jeden algoritmus iný. Testoval som oba na rovnakej vzorke 500 súborov :

na RAMdisku
1. variant (s vkladaním vzorca) - 2,3 sekundy
2. variant (s ExecuteExcel4Macro) - 1,8 sekundy

na HDD (7200 rpm)
1. variant (s vkladaním vzorca) - 1,8 sekundy
2. variant (s ExecuteExcel4Macro) - 1,4 sekundy

na SSD disku
1. variant (s vkladaním vzorca) - 2,3 sekundy
2. variant (s ExecuteExcel4Macro) - 1,7 sekundy

Testy som robil niekoľkokrát, a vyšli na prvý pohľad naozaj veeeľmi zvláštne. Teoreticky by mala byť rýchlosť najlepšia na RAMdisku, potom na SSD, potom na HDD. Najlepšie mi ale vyšiel HDD, pretože SSD je sytémový (momentálne 134 procesov, a to je už optimalizovaný), RAMDisk je používaný ako cahce pre 3 prehliadače ... (+ automatická záloha). A HDD (ten konkrétny kus) je najmenej namáhaný. Je krásne vidieť, že na rýchlosť vplýva všetko.

Otestujte si, a vyberte si.

PS: Merané len tak od oka stopkami.

A odkiaľ zoberieme ten link ? Ak ste mysleli toto, tak opäť zbytočná doterajšia práca, so zoznamom ...

Prosím Vás popíšte presne krok za krokom čo chcete presne dosiahnuť. Ale naozaj krok po kroku, napr. :
-v liste start zapíšem do A1 nejakú hodnotu
-kliknem na tlačítko, a vytvorí sa mi list s názvom, ktorý je o 1 väčší ako číslo v AX1, pričom sa toto číslo tiež zväčší
-do bunky A2 v liste start sa vloží toto nové číslo, rovnako ako aj do bunky A2 v novovytvorenom liste
-chcem zostať prepnutý na novom liste
-zároveň chcem, aby keď sa prepnem znovu na list start, a stlačím tlačítko, aby ma preplo na list ktorého názov je v A1 uvedený ak existuje, ak neexistuje, tak nech ho vytvorí, a prepne ma naspäť na list start
-...

Takto to prosím Vás popíšte. V tom Vašom kóde nemáte definované premenné, nieje vôbec jasné, kedy na ktorý list zapisujete, Odkazujete sa na bunku Cells(1,7) v ktorej ale nič nieje, a ani tam za celú dobu behu makra nič nevkladáte - čiže automaticky to končí chybou. Navyše v kóde je divná podmienka, keď NazevListu sa získava v podmienke, ale zapisuje sa do bunky Cells(1,5) aj mimo podmienku.
... Celý kód je podľa mňa prinajmenšom divný.

Už som sem dával riešenie podobného problému. Viete si to upraviť?
http://wall.cz/index.php?m=topic&id=24791
Ak nie, tak by som Vám to snáď zajtra spáchal. Ten "seznam" má byť ako list alebo ako Výberový zoznam v bunke, a to v nejakom novom súhrnnom zošite ?

EDIT: Posielam nejaký ten návrh.
A ešte otázka, koľko tých súborov v adresári asi bude ?

Z tabletu, takže iba typ:
Toto nefunguje ?
Me.Image1.Picture = LoadPicture(Worksheets("Hárok1").Cells(2,1).Value)
Kde Image1 je objekt Obrázok na forme.

EIDT: A ešte by som ošetril volaciu procedúru :
Sub Tlačidlo1_Kliknúť()
On Error Resume Next
UserForm1.Show
If Err <> 0 Then
MsgBox ("- chybný formát obrázku," & vbNewLine & "- neexistujúci obrázok," & vbNewLine & "- alebo iná chyba pri jeho načítaní")
Exit Sub
End If
On Error GoTo 0
End Sub

pretože stačí aby bola chyba v názve, či nesprávny formát a havaruje to - samozrejme.
A ešte drobnosť, PictureSizeMode by som dal na fmPictureSizeModeZoom, v prípade ak sa nevie aký pomer strán alebo veľkosť budú mať tie obrázky.

Tento najnovší kód už Head1 zmaže, ale opäť iba raz. Opätovné použitie stále nefunguje ani ostatné Heads.

Neviem či som to tu niekde včera písal, alebo som na to len myslel ... akákoľvek nepresnosť pri zadaní môže spôsobiť zbytočnú prácu tých čo tu pomáhajú. Lenže to asi nemá riešenie, keďže človek ako taký, sa nedokáže vcítiť do "kože" druhého, aby uhádol aj to čo je pre dotazujúceho samozrejmosť, a opačne. Preto tu teraz diskutujeme, myslím že aj tak zbytočne. Vyvíjame 2 varianty, lepšie by bolo vyvinúť jeden, ale najlepší pre užívateľa. Užívateľ nech si otestuje v reále, nech dá vedieť. No veď niečo spoločnými silami už len spáchame 1

@marjankaj:
Nechcem sa dohadovať (strata času), tak krátko:
-Head1 sa má mazať rovnako ako ostatné. Myslel som na to hneď v prvom príspevku (otázka 2). Odpoveď je jasná - ÁNO mazať.
-Na môj prvý súbor ? Dal som iba jeden, a ten fungoval tak, ako boli do tej doby keď som ho postoval špecifikované požiadavky. Ak sa pridala požiadavka na nemazanie v prípade kompletného zaplnenia, pripísal som len potrebnú podmienku.
-Je šuma-fuk koľko riadkov, ale dotyčný písal do 150 riadkov = no problém (maximálne dočasne vypnúť ScreenUpdating). Každopádne, ak by spomenul, že to chce na 20000 Rows, tak určite nie takto, ale cez pole, a jedno načítanie a jeden zápis celého poľa naraz. Ale o tom nebola reč.
-Stačí keď Vám v kóde akokoľvek uhladenom a krátkom nefunguje jedna jediná vec, tým pádom kód proste nefunguje. A to som napísal. Často stačí iba jediná drobná podmienka od uživateľa, a kód sa znásobí do dĺžky aj komplikovanosti.
-Vo Vašom novšom kóde, rovnako nieje vyriešený problém odstránenia Head1 - takže opäť nefunguje, nech je akokoľvek krátky. Elegantná metóda xlDown a spol, sa niekedy nedá jednoducho použiť.
-Tento nový kód dokonca akonáhle raz zapíše hodnoty do Head5, ďalšie spustenie už nič neurobí. Ďalšie posledné hodnoty už proste neposunie.

Pripravil som novú verziu, ak by si uživateľ prial napr. zmazať riadky, kde už nič nieje, tak napr. takto.

Presne takto jednoducho - to nefunguje. Head1 tam stále necháva, nikdy ho nezmaže, aj keď to je podmienka. Preto som to trochu "zkomplikoval". Pretože ak to urobíme tak, aby sa zmazal Head1, tak ako sa má, tak nám ostane v Head5 posledný záznam. Ten by rovnako nebol nikdy zmazaný. Preto som tam musel dať kontrolu celej šírky oblasti na posledný riadok. Aby sa aj toto eliminovalo.
Tak isto tento Váš kód nefunguje, keď sú zaplnené Head1 až Head4. Pretože vtedy xlToRight vracia odkaz na Head5, kde je výsledok. Čiže vystrihne výsledok a vloží ho na to isté miesto, na výsledok. Neberie poslednú hodnotu, čiže Head4.
...

EDIT:
@Michal_85:
Iba vymeniť
Cells(i + 1, Posl) = blank
za
If Posl <> 4 Then Cells(i + 1, Posl) = blank


Strana:  1 ... « předchozí  271 272 273 274 275 276 277 278 279   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