

Excel-VBA Duplicita_OddelitText
Pokusam sa najst riesenie, ale nedari sa mi. Pokial do tabulky vkladam data manualne z klavesnice riesenie mam, ale ked vkladanie robim zo Schranky cez Vlozit inak- Text, nastava problem. Dokazal by mi niekto pomoct? Chcel by som poprosit o nasledovne:
1. Dvojklikom mysi vlozit zo Schranky data ako text do lubovolne vybranej bunky v C3:C24 (moze byt prazdna, alebo prepisem existujucu). Do Schranky sa kopiruju data z inej aplikacie.
2. Po vlozeni dat do bunky, skontrolovat duplicitu v C3:C24 (prazdne bunky nekontrolovat na duplicitu). Ak je duplicita zobrazit nejaku spravu (napr. Duplicita dat), duplicitu podfarbit a cez tlacitko stornovat vkladane data.
3. Ak nie je duplicita, potom lavu cast vlozeneho textu , oddelenu od ostatneho textu medzerou, vloz do zodpovedajuceho riadku do stlpca B. Data v bunke C ostanu nezmenene.
4. Pri vkladani dat z klavesnice a pri nulovani B3:C24 klavesnicou Delete, sa makro podla bodov 2 a 3 nespusta.
Validacia dat a podmienene formatovanie tento problem neporiesia.
Zbavi ma niekto tejto nightmare? Dakujem pekne.
Muzes pouzit udalostni proeduru viz nize, ktera overi duplicitu v bloku bunek C3:C24, pokud vlozena data vyhovuji, vlozi do odpovidajici bunky v B:B levou cast retezce po mezeru. Dale je osetreno vkladani do vice bunek najednou.
Dakujem za skoru odpoved. Ja odpovedam trosku neskorsie, pretoze som riesenie overoval. Podstatu mojho problemu riesenie splna, ale:
1. Data sa mozu vkladat len ako text, co som mozno v zadani nie jednoznacne zadefinoval a zdoraznil, preto som chcel vkladanie dvojklikom mysou. Vkladanie cez Vlozit (Paste)nesmie byt, co uzivatelovi nemozem zabranit. Poprosil by som tuto dodatocnu poziadavku zakomponovat do makra pokial to ide - dakujem.
2. Po zadani duplicity do vyplnenej bunky v stlpci C a akceptovani Msgboxu, sa obsah tejto bunky vynuluje. Tak ako zostane udaj v zodpovedajucej bunke v stlpci B, musi zostat aj povodny obsah v stlpci C - uzivatel sa mohol pomylit.
3. Duplicitna bunka alebo hodnota sa nevysvieti (nezafarbi)
4. Snazil som sa otestovat vkladanie do viac bunek najednou, ale sa mi to nedarilo. Ak som vybral dve bunky v stlpci C3:C24 a pokusil sa vlozit text zo schranky, upozornilo ma "Data v schranke nie su zhodneho rozsahu ..." a nie ako je to v makre. Asi som nepochopil tvoju myslienku.
Omlouvam se za zpozdeni s odpovedi,byl jsem mimo domov.
Procedury v modulu listu.
Zabrana rucniho vlozeni dat do C3:C24:
vkladani z clipboardu - dvojklik na cilovou bunku v C3:C24, je nutné nastavit odkaz na Microsoft Forms 2.0 Object Library: VBA>Tools>References...:
Snad to bude vyhovovat.
Dakujem pekne, uz som ani necakal odpoved. Pouzivam MS Excel 2007 a odkaz na Microsoft Forms 2.0 Object Library nemozem najst v References. Neviem ci 2007 tuto kniznicu podporuje.Alebo sa mylim? Tym nemozem makro odskusat.
Pri trose hledani na Googlu bys nasel: http://p2p.wrox.com/excel-vba/5118-how-get-microso ft-forms-2-0-object-library.html
Postup: Tools>References>Browse a najit soubor FM20.dll a Otevrit.
Ospravedlnujem sa za nehladanie v Googli.
Dakujem za straveny cas pri tvoreni makra - si fachman, klobuk dole. Makro funguje az na jeden detail, ktory som objavil celkom nahodne. Omylom som 2x klikol na bunku v rozsahu C3:C24 vtedy, ked schranka bola prazdna. Vypisala sa chyba: Run-time error'-2147221404 (80040064)': DataObject:GetText Neplatná struktura FORMATETC. Potom uz makro nepracovalo, musel som zosit zavriet a znovu otvorit.
Islo by zaradit kontrolu schranky ci je prazdna predtým, ako vlozim text do bunky v C stlpci? Dat nejaky Msg o tom, ze chranka je prazdna.
Nemusis se omlouvat za nehledani na Googlu, spis se omlouvam ja, ze jsem dusledne neosetril stav, kdy je clipboard prazdny.
Procedura po vznikle chybe a ukonceni behu celkem zakonite nemohla pri opakovanem zavolani pracovat, nebot nedoslo v dusledku predcasneho ukonceni procedury k obnove zachytavani udalosti nenastavenim vlastnosti Application.EnableEvents = True. Pro takovyto pripad staci pouzit proceduru:
Procedura Private Sub Worksheet_BeforeDoubleClick je doplnena o kontrolu, zda neni clipboard prazdny a upravena, nahrad predchozi proceduru:
Vdaka za odpoved, ale v pripade ked je clipboard prazdny, opat dojde k Run time error 2147221404(80040064):
DataObject:Get Text Neplatna struktura FORMATETC.
Nedoslo ani k Msg "Clipboard je prazdny". Pri Debugu ostal vysvieteny prikaz:
TmpStr = Trim(DataObj.GetText)
Po Endovani hlasky, s makrom sa dalej dalo pracovat.
Funkcnost jsem testoval v Excel 2000 (.xls) tak i v Excel 2007 (.xlsm), vzdy funkcni. Ovsem je otazkou, jak byl ziskan "prazdny" clipboard.
Takze dopln proceduru o vyznacene radky pred a za inkriminovanym radkem:
...
On Error Resume Next
TmpStr = Trim(DataObj.GetText)
On Error GoTo 0
...
BINGOOOOOOOO!!!
Funguje to presne tak, ako som potreboval. Srdecna vdaka za riesenie. Vela uspechov v Tvojej tvorivej praci. Cheers, superman.