Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Zmazanie poslednej zadanej hodnoty z bunky pomocou makra?

Ahojte, mam toggle button, ktorym v prvej polohe vlozim hodnotu do bunky a v druhej polohe tuto hodnotu vymazem. Len potrebujem zmazat len tu hodnotu, ktora bola pridana v tej prvej polohe a zvysok obsahu bunky ostane nezmeneny. Jednoducho povedane. V bunke C3 mam hodnotu DDD a ked stlacim toggle, tak budem mat hodnotu DDD1, ked znovu stlacim toggle, tak budem mat znovu hodnotu DDD. Skusal som si ulozit tu predchadzajucu hodnotu bunky C3 do premennej a pri mazani v tej druhej polohe ju vyvolat, ale zatial neuspesne, resp. len tak badam:)

Předmět Autor Datum
Pokud je tech bunek vic, tak druhy skryty list, do ktereho budes zapisovat puvodni hodnoty (mozna ti… nový
Jan Fiala 26.08.2014 14:06
Jan Fiala
No mam jednu jedinu bunku, napr. C3 a dajme tomu 10 toggle buttonov, kde ku kazdemu je priradena nej… nový
Abu255 26.08.2014 14:20
Abu255
Tak podarilo sa mi to vyriesit, ak by niekoho zaujimal kod: Private Sub ToggleButton24_Click() If… nový
Abu255 26.08.2014 17:10
Abu255
vysvetlenie nie je dostatočné, pokiaľ v dotaze píšeš o reťazcoch, v odpovedi píšeš o číslach. Pokiaľ… nový
robert13 26.08.2014 17:12
robert13
aha, práve som dopísal, keď vidím, že medzitým si už reagoval :D tak nič... Dôležité je, že ti to ro… nový
robert13 26.08.2014 17:13
robert13
Vdaka Robo, suhlasim so vsetkym, co si napisal, ty uz ako programator myslis prakticky na vsetky moz… nový
Abu255 26.08.2014 17:31
Abu255
no jo, ale takýmto princípom je tam vnesiteľný chaos. Ty posledný znak môžeš vymazať vypnutím ktoréh… nový
robert13 26.08.2014 17:49
robert13
Samozrejme, ale tak obsluha bude riadne vyskolena:), aj ked vieme ako to chodi. Ale ak si raz pracov… nový
Abu255 26.08.2014 18:05
Abu255
no v combe mam listfillrange z ineho harku a je nalinkovane na C3... nový
Abu255 26.08.2014 17:34
Abu255
samozrejme hodnoty su zadavane do comba, ale kedze je to nalinkovane na bunku, tak sa automaticky uk… nový
Abu255 26.08.2014 17:41
Abu255
vidím, že sa predbiehame, čítaj ma vyššie :D nový
robert13 26.08.2014 17:49
robert13
jasne, chápem... len pre poriadok ;) nový
robert13 26.08.2014 17:54
robert13
pouvažuj, či by nebolo vhodné zaviesť mazacie tlačidlo, mažúce od konca po začiatok toľko znakov, ko… nový
robert13 26.08.2014 18:00
robert13
to je zaujimave, tlacidlo, co odmazava posledny znak mam poriesene (ComboBox1.Value = Left(ComboBox1… nový
Abu255 26.08.2014 18:19
Abu255
...no, tak už aj ja som po svojej dennej dávke inlineskates :D tak môžeme pokračovať ;) Vyššie som t… nový
robert13 26.08.2014 19:51
robert13
a keďže vidím, že k tomu máš vzťah, tak ti posielam malú odmenu: Zaraďujeme vyšší level - "UŽÍVATEĽS… nový
robert13 27.08.2014 09:37
robert13
oprava... v kóde boli ešte nejaké chybičky (zabudol som skopírovať uvoľnenie tlačidla "Oprava" po st… nový
robert13 27.08.2014 13:08
robert13
Nazdar Robo, dnes som bol sluzobne prec, tak az teraz. Dik moc, prestudujem to cele zajtra, dnes mam… nový
Abu255 27.08.2014 17:25
Abu255
ak by si predsalen skúsil implementovať tento spôsob ovládania, našiel som tam ešte jednu chybičku -… poslední
robert13 28.08.2014 05:52
robert13

No mam jednu jedinu bunku, napr. C3 a dajme tomu 10 toggle buttonov, kde ku kazdemu je priradena nejaka hodnota, ktora sa ma pri prvej polohe zapisat do C3 a v druhej polohe sa dana hodnota vymaze. Princip je nasledovny, napr. toggle3 vlozim hodnotu 5, toggle7 vlozim hodnotu 7, cize v C3 bude 57 a teraz znovu stlacim toggle7, cize v C3 bude len hodnota 5. Ide o mazanie len poslednej hodnoty v bunke druhou polohou naposledy stlaceneho tlacidla...

Tak podarilo sa mi to vyriesit, ak by niekoho zaujimal kod:

Private Sub ToggleButton24_Click()

If ToggleButton24.Value = True Then
Range("C3") = Selection & 5
ToggleButton24.BackColor = RGB(255, 0, 0)
Else: ToggleButton24.BackColor = RGB(0, 255, 0)
Range("C3").Select
ComboBox1.Value = Left(ComboBox1.Value, Len(ComboBox1.Value) - 1)
End If
End Sub

vysvetlenie nie je dostatočné, pokiaľ v dotaze píšeš o reťazcoch, v odpovedi píšeš o číslach. Pokiaľ pôjde o čísla, nie je jasné, či ich spájaš ako reťazce alebo ošetruješ skutočne ako čísla, t.j. riešiš aj rády čísel.
Predpokladám, že to riešiš ako reťazce. V tom prípade ďalší dotaz: ok, ak stlačíš toggle, ktorý ti z 5 pridaním 7 vytvorí 57. Hovoríš, že opätovným stlačením toggle, ktorý pridal 7 sa tá 7 odstráni... No jo, ale čo ak pri 57 stlačíš toggle, ktorý ti tam pridal tú 5 !?!
Mám to chápať tak, že opätovným stlačením ktoréhokoľvek toggle sa z výsledku odstráni ten znak, ktorý tam toggle pridal? Lebo to zas nesúhlasí s tým, čo hovoríš, že chceš odstrániť len posledný znak!!!
Ja to chápem tak, že ako prvé stlačím napr. toggle3 ktoré zapíše 5-ku (nechápem, prečo nie 3-ku, ale to je jedno). Potom stlačíš napr toggle7, ktorý pridá napr 7, vznikne 57. Pokračujme: stlačím toggle4, ktoré pridá napr 2, t.j. vznikne 572.
Chápem dobre, že chceš, že ak teraz vypneš toggle3 (ktoré v tom reťazci zadávalo 5-ku) vznikne 72?
;)
Keď chceš byť programátor, musíš vedieť najprv jasne definovať, čo chceš a ako to chceš ;)
Neboj, ako vravím, v Exceli sa dá VŠETKO, takže aj toto sa dá :D len treba vedieť, čo vlastne chceš :D

aha, práve som dopísal, keď vidím, že medzitým si už reagoval :D tak nič... Dôležité je, že ti to robí, čo potrebuješ, aj keď si tým nie som istý. Pokiaľ totiž takto ošetríš aj ostatné toggle, tak pokiaľ vypneš ktorýkoľvek z nich, odstráni zas posledný znak, bez ohľadu na to, či TEN toggle pridal TEN znak, ktorý ti zmaže... A okrem toho raz chceš odmazať znak v C3 a druhýkrát v Combe??? Takže hol van a Vinnetou??? ;)

Vdaka Robo, suhlasim so vsetkym, co si napisal, ty uz ako programator myslis prakticky na vsetky mozne pripady, ktore mozu nastat. Situacia je nasledovna: do bunky C3 user bude zadavat kod vyrobku, ktory sa sklada z cisiel a nikdy neobsahuje dve rovnake cisla a mne staci, ze ked sa pomyli, tak opatovnym klikom posledne zadane cislo vymaze. Samozrejme, ak spravi chybu uz skor a uvedomi si to neskor, tak vymaze celu bunku a pojde od zaciatku. Aj mna napadlo, ze zaujimave by bolo, ze sa vymaze konkretne cislo od konkretneho toggle a v danom mieste ho nahradim spravnym cislom, ale potom by zase musel klikat v bunke na poslednu poziciu aby mohol pokracovat dalej. Takze ma moznost sa opravit pri chybnom zadani posledneho cisla, ked sa pomylil uz skor, tak pojde odznova, tak mi to vyhovuje. A na vyjadrovani popracujem:).

no jo, ale takýmto princípom je tam vnesiteľný chaos. Ty posledný znak môžeš vymazať vypnutím ktoréhokoľvek toggle (otázne je, načo by to niekto robil, ale ide o princíp - výsledok by nezodpovedal postláčaným toggle). Ale je pravda, že ak ti to nevadí, potom to, čo si napísal, plní to, čo si chcel. Proste keď zistí, že urobil chybu v POSLEDNOM znaku, vypnutím toho toggle tú chybu napraví. Ono ide o to, že programy by sa mali robiť blbuvzdorné, t.j. aby aj niekto, kto nevie, čo môže a čo nie, nemohol urobiť nič, čo by výsledku mohlo uškodiť. TY budeš vedieť, že nemáš druhýkrát stláčať to, čo už bolo nastláčané pred posledným znakom, ale iný nie... Bude skúšať, čo to spraví, keď stlačí to, čo už bolo stlačené a oups, zmazalo to posledný znak a teraz čo, keď to chcem napraviť a stlačím ten toggle, ktorým som nechtiac odmazal posledný znak? A ajhľa, pridá mu to na koniec druhýkrát ten znak, ktorý tam už má a ako ty vravíš, žiadna cifra sa tam nemá opakovať! Tak potom ako ďalej? Začne chaosiť a zamotávať sa... ;)

Samozrejme, ale tak obsluha bude riadne vyskolena:), aj ked vieme ako to chodi. Ale ak si raz pracovnik nechce robit svoju pracu, tak moze mat neviem ako blbovzdorny program a dokaze robit "kraviny". Viem, ze je mozne do tej aplikacie zadat neviem ako overovania, ci bolo zadane vsetko ako malo byt atd., ale tak ak je clovek zodpovedny, staci to aj takto:), ale dik Robo za kazdu pripomienku.

pouvažuj, či by nebolo vhodné zaviesť mazacie tlačidlo, mažúce od konca po začiatok toľko znakov, koľkokrát sa stlačí a zároveň by vypínalo to toggle, ktoré patrí odmazanému znaku. To by bolo správne aj principiálne a blbuvzdorné. Okrem toho je potrebné zabrániť viacnásobnému stláčaniu toggle, kým sa zadané číslo neodošle. Píšeš totiž, že sa nikdy nesmie zopakovať rovnaká cifra...
Ty si šikovný, zmákneš to ;)
P.S. odchádzam do terénu, prípadná odpoveď neskôr...
Čítaj aj vyššie, lebo sa nám premiešali odpovede ;)

to je zaujimave, tlacidlo, co odmazava posledny znak mam poriesene (ComboBox1.Value = Left(ComboBox1.Value, Len(ComboBox1.Value) - 1). Ale co by sa stalo, ak by uzivatel stlacil toggle, odosle cislo a potom ten isty toggle stlacil znovu, tym padom by toggle odznacil. To by bolo dobre asi tak, ze by on uz toggle kliknutim nan nemohol odznacit, ale toggle by bol odznaceny jedine tym mazacim tlacidlom. No budem o tom premyslat, idem si ja zacvicit, tak zatial....

...no, tak už aj ja som po svojej dennej dávke inlineskates :D tak môžeme pokračovať ;)
Vyššie som ti už písal, že po každom stlačení Toggle by sa toto Toggle zablokovalo proti ďalšiemu použitiu (napoviem: vlastnosť "Enabled": True = prvok prístupný pre obsluhu, False = prvok neprístupný pre obsluhu). Všetky Toggle by sa naraz uvoľnili a nastavili na východziu hodnotu, keď bude navolená hodnota potvrdená a odoslaná na ďalšie spracovanie. Treba však ošetriť aj to, keď si sa pomýlil (a je jedno, kde), t.j. tlačidlom spätného mazania by sa postupne, ako by si mazal, uvoľňovalo vždy TO Toggle, ktorým bola vpísaná TÁ hodnota, ktorú si práve zmazal. No a tlačidlo na spätné mazanie by sa zablokovalo, keď by už ďalej nebolo čo mazať, t.j. bol zmazaný aj posledný znak. A si opäť na začiatku...
Aj keď to nemusíš riešiť (ak si, ako vravíš, vyškolíš personál :D ) ale ber to ako príklad na tvoje zdokonaľovanie ;)

a keďže vidím, že k tomu máš vzťah, tak ti posielam malú odmenu:
Zaraďujeme vyšší level - "UŽÍVATEĽSKÝ FORMULÁR"
Jeho tvorba je veľmi jednoduchá a umožňuje neuveriteľné veci!

Kompletne preskúmať ho môžeš v editore VisualBasicu, kde sú k jednotlivým prvkom priradené procedúry udalostí.
Ty si už natoľko šikovný, že keď si to prezrieš, hneď pochopíš, ako a prečo je to tam tak zapísané, ako je.

Samozrejme, toto by sa previazalo s tvojou tabuľkou a povel "Odoslať" by hodnotu vlepil na patričné miesto (nastavil som na C3 prvého hárka)a spustil makro, ktoré sa ďalej postará o úkony, ktoré sa so zadanou hodnotou majú diať.

R

oprava...
v kóde boli ešte nejaké chybičky (zabudol som skopírovať uvoľnenie tlačidla "Oprava" po stlačení nuly a keď som chcel zelegantniť spätné uvoľnovanie číslicových kláves, musel som poprehadzovať pozície prvkov a zabudol som ich aj premenovať podľa novej pozície). Prvú chybu sa dalo užívateľsky odhaliť, druhú nie.
Takže prevezmi tento súbor a stavaj na ňom...

Nazdar Robo, dnes som bol sluzobne prec, tak az teraz. Dik moc, prestudujem to cele zajtra, dnes mam este ine povinnosti. Ta moja "aplikacia" mala vybornu odozvu, ale potrebujem tam este vyladit nejake veci, jednu tu hned hodim ako novy prispevok, nech to nie je vsetko nahadzane tu. Este raz dik za tvoju vycerpavajucu pomoc!

Zpět do poradny Odpovědět na původní otázku Nahoru