Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  282 283 284 285 286 287 288 289 290   další » ... 300

Keďže Mapa znakov vo Win udáva vľavo dole HEX kód, tak sa môže použiť ten:
ChrW(&HF8) 'To "&H" je značka pre HEX kód, a to "F8" je skrátené "00F8" z Mapy znakov

Worksheets("Sheet1").Shapes(1).OLEFormat.Object.Text = ChrW(248) & " niečo"
Samozrejme je vhodné si .Shapes(1) premenovať

EDIT:
Prvok si premenuj tak , že mu nastav makro na toto:
Sub Premenuj()
Dim o As Object
Set o = ActiveSheet.Shapes(Application.Caller)
o.Name = "tbPriemer"
End Sub

a klikni na prvok. Potom tomu prvku makro zruš. A už sa volá "tbPriemer". Ja mám medzi prvkami rád poriadok, a ja chcem určovať ako sa ktorý volá, najmä ak ich je viac rovnakých.
Potom to zameníš za:
Worksheets("Sheet1").Shapes("tbPriemer").OLEFormat.Object.Text = ChrW(248) & " niečo"

Vyskúšajte reset Excelu, pri vypnutom Exceli, v Regedit premenujte kľúč:
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Excel
na
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Excel.old
Excel si tento kľúč vytvorí znovu "čistý".
Spustite Excel, vyskúšajte. Bez problémov to môžete vrátiť naspäť tak, že ten novovytvorený kľúč zmažete, a "Excel.old" premenujete naspäť na "Excel".

PS: To "15.0" v kľúči je Office 2013, pre 2007 bude menšie (neviem z hlavy, možno 13.0) číslo.

V podmienenom formátovaní 5ikon, nieje možné použiť relatívne odkazy, potrebné na adresáciu bunky, ktorú práme formátujeme, tak ako je to pri normálnom podmienenom formátovaní. Nejde použiť ani zástup pomocou ROW()/COLUMN() spolu s INDEX, ani Definovaný názov. Vždy to naraz ovláda celú oblasť. Preto som vymyslel nasledovný spôsob:
- Najskôr si prvý krát pripravíme podmienené formátovanie pre každú bunku zvlášť, priloženým makrom.
- Nezabudneme na potrebné úpravy rozsahov v OnChange, aj pre NewData, aj pre OldData.
- V OnChange som urobil malú fintu, aby som získal po zmene pôvodné data, a tie nakopíroval do OldData.

Funguje to tak ako popisujete. Pri zmene z oblasti, sa prenesú všetky do tej doby staré data na OldData, a "vybaví" sa pre každú bunku zvlášť formátovanie.

Áno, bol som si takmer istý, že presne tomuto nebudete rozumieť 5
Pole UF je pole zadaných dát od užívateľa. Tieto dáta sa potom zložia do reťazcov pre filter. Pretože asi bude jednoduchšie, ak budete mať na výber zvlášť znamienka, a hodnoty zadáte aké potrebujete. Keďže sa teda každý jednotlivý filter skladá z 2 stĺpcov (znamienko, data), ale jednotlivý filter je len 1 stĺpec, potrebujeme si vypočítať ktorá časť poľa UF (8 stĺpcov) patrí k práve spracovávanej časti filtra (4 stĺpce)

UF(y, (x - 1) * 2 + 1) vráti znamienko
UF(y, (x - 1) * 2 + 2) vráti dáta filtra

x - je vodorovná súradnica (dosaďte si čísla 1 až 4 a zistíte ako to funguje)
y - je zvislá súradnica

If x = 4 Then dat = CStr(CDbl(UF(y, (x - 1) * 2 + 2))) Else dat = UF(y, (x - 1) * 2 + 2)
Ak spracovávame dátum (X = 4) tak CDbl prevedie dátum na číslo, a CStr to číslo prevedie na string. Ak je X <> 4 tak dostaneme hodnotu rovno z UF.

FF(y, x) = IIf(IsEmpty(UF(y, (x - 1) * 2 + 1)), IIf(IsEmpty(UF(y, (x - 1) * 2 + 2)), Empty, "=" & dat), UF(y, (x - 1) * 2 + 1) & IIf(IsEmpty(UF(y, (x - 1) * 2 + 2)), Empty, dat))
FF je pole hotových reťazcov pre filter, a tie reťazce vypočítame cca takto:
JePrázdneZnamienko = IsEmpty(UF(y, (x - 1) * 2 + 1))
JePrázdneFilterData = IsEmpty(UF(y, (x - 1) * 2 + 2))
Empty = prázdna bunka/reťazec

Ak JePrázdneZnamienko=True tak
------ ak JePrázdneFilterData=True tak vráť Empty
------ ak JePrázdneFilterData=False tak vráť "=" & dat
ak JePrázdneZnamienko=False tak
------ vráť znamienko &
----------------------- ak JePrázdneFilterData=True tak Empty
----------------------- ak JePrázdneFilterData=False tak dat

To som samozrejme nedal zbrucha, ale najskôr som si pri návrhu vytvoril pomocné premenné, ktoré som po zfunkčnení, odstránil a nahradil rovno tým, čo reprezentujú. Urobil som to len kvôli o niečo kratšiemu kódu.

No a zabezpečuje to to, že aj keď nezadáte do znamienka nič ale dáta áno, vloží sa namiesto ničoho "=" + dáta. Ak zadáte znamienko, ale nezadáte dáta, vloží sa len znamienko (pre prípad testu nevyplneného údaju), ak nieje ani znamienko ani data, nevloží sa nič (Empty), ak sú oboje, vložia sa oboje spolu.

PS: Ak to bude pre Vás ľahšie pochopiteľné, tak Vám to vrátim do stavu s pomocnými premennými.

No takže mám to upravené, funkčné. Okrem toho, že vzorec nedokáže vrátiť EMPTY (BLANK), tak tam bol ešte jeden zákerný problém v IIF. Vyriešené.
Chcete aj popis makra ? (Príliš sa mi nechce, ale keby ste naliehal ...)

A a teraz, po mojom trápení, sa potrápte Vy, a dajte čo najpodrobnejší popis o tých súboroch, z ktorých by ste tam ešte chceli čerpať ďalšie data. Ešte raz opakujem, čo najpodrobnejší. Teda napr. (okrem iného):
-kde budú uložené tie iné zošity?
-bude ich premenlivý počet?
-budú mať nemenné názvy?
-ak budú názvy menné, podľa akého vzorca sa budú meniť?
-budú obsahovať meniaci sa počet riadkov?
-budú mať rovnakú štruktúru ako tento zošit?
-budú mať rovnaký typ dát?
-budú mať rovnaký počet a usporiadanie stĺpcov?

Uvidíme podľa toho čo popíšete, či to vôbec bude riešiteľné, a či sa na to dám, pretože popravde, zatiaľ netuším ako by sa to dalo (podľa tipovaných odpovedí na dané otázky).

Takto by som si predstavoval zjednodušenie zadávania filtra pre užívateľa (ten červený filter bude schovaný)). Problém je, že to funguje iba čiastočne.

Preto prosím o radu kolegov, prečo mi to neberie korektne v úvahu dátum, ak vo filtri nieje iná podmienka ? Akonáhle je tam okrem dátumu napr. aj nejaká podmienka veku, hneď to funguje. Ale samotný dátum nie.

@A ještě jedna věc mě napadla když bude více zdrojových souborů aby se výsledky načítali do jednoho listu (do buněk by se napsaly cesty k souborům a z těch by se načetly data)?
Toto bude zložitejšie ako si myslíte, neviem či sa mi s tým bude chcieť paprať. Vy viete koľko vzorcov na získanie dát máte vložiť ? Viete ako sa budú volať súbory ? Viete aké názvy budú mať listy? Viete koľko listov bude ? To sú nesmierne komplikácie na získanie neznámeho počtu dát z neznámeho počtu listov, neznámych názvov listov, neznámeho počtu súborov a ich názvov.

PS: zmenil som makro tak, že sa data zoskupia len keď sa aktivuje list Filter, a ten sa prepočíta, ak je zmenená bunka vo filtri.

EDIT: Takže problém je pravdepodobne v tom, že vzorec nedokáže vrátiť hodnotu Empty, ale iba "" a to robí vo filtri galibu. Pracujem snáď na riešení.
A v tomto poslednom súbore som zabudol ešte po otvorení aktualizovať, a po otvorení to píše chybu, ale to neva, opravím v ďalšej verzii - ignorovať...

Po otvorení zošitu, alebo každom aktivovaní listu Hárok1, alebo po stlačení tlačítka, sa aktualizuje výberový zoznam, ktorý obsahuje všetky súbory .xlsx v adresári odkiaľ je tento súbor otvorený. Po aktualizácii sa automaticky nastaví na 1. voľbu. Vyberiete si v zozname, samé to vloží vzorec na čítanie dát z daného súboru.

Á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.


Strana:  1 ... « předchozí  282 283 284 285 286 287 288 289 290   další » ... 300

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