
Makro pre kontrolu pozadovanych buniek.
Ahojte..., potreboval by som vyriesit nasledovne: v exceli mam mandatory stlpce, napr. D, G, H, J. Viem spravit makro, ktore mi kontroluje obsah konkretnej bunky napr. D1, G1 atd. Ako spravim nasledovne. Do harku sa budu postupne zapisovat riadky, kde dane 4 polia musia byt pred stlacenim tlacidla na odoslanie vyplnene. Cize otvorim excel a zacnem do prveho volneho riadku pisat udaje, ked mam vsetky polia vyplnene, stlacenim tlacidla sa udaje odoslu, ked nemam vyskoci mi message box, ze chybaju udaje. Potom zase otvorim dany dokument a idem pisat udaje do nasledujuceho volneho riadku a tak vzdy dalej. A ja chcem aby mi to jedno tlacidlo vzdy dokazalo skontrolovat dany aktivny riadok ktory prave vyplnam, bude to vlastne vzdy posledny volny riadok do ktoreho vpisujem. Dakujem!
Excel - VBA - Nalezení posledního obsazeného řádku:
Prikladám riešenie (pokiaľ som Tvoju potrebu dobre pochopil...)
Uprav si ho podľa potreby, určite to pochopíš.
Riadok kódu kontrolujúci vyplnenosť bunky C a D v poslednom riadku je ošetrený aj proti špekulantom, ktorí by chceli obísť nutnosť vyplnenia tým, že naplnia bunky medzerníkom...
Nie je však vylúčená zlomyselnosť, že sa súbor uzavrie manuálne a manuálne sa odošle oznam o aktualizácii tabuľky, to ale nie je ošetrenie nepozornosti, to je úmyselné zavádzanie, také nevylúčiš nikdy, jedine autodeštrukciou počítača pri uzavretí súboru bez kontroly vstavaným makrom ;)
Vravíš, že všetko ostatné funguje, tak to ani neriešim... Odoslanie oznamu, uloženie a uzavretie súboru môžeš zautomatizovať doplnením kódu v mieste, kam som Ti dal komentár.
To, že sa v predchádzajúcich riadkoch vyskytujú riadky nevyplnené v povinných bunkách si nevšímaj (len som testoval aktuálnu oblasť), chcel si kontrolu len posledného riadka (tie predchádzajúce sa samozrejme mali odkontrolovať vtedy, keď sa napĺňali a pokiaľ neboli v poriadku, nebolo by Ťa cez ne pustilo...)
Kebyže sa naraz vypĺňa viac riadkov, potom je ale problém. Odkontrolovávaný by bol len posledný (tak si to chcel)...
Ak by bolo potrebné skontrolovať viac nových riadkov počínajúc tým, ktorý bol posledný pri otváraní zošita, musel by sa kód doplniť o premennú, ktorá by mala počiatočnú hodnotu v riadku pod posledným riadkom otváraného zošita a koncovú hodnotu v poslednom riadku pred kontrolou a otestovať povinné bunky v cykle medzi týmito premennými...
Dik moc Robo, zajtra to otestujem. Vzdy sa bude vyplnat len jeden riadok, ale dakujem za doplnujuce info. Zajtra dam vediet, ze co a ako:)
OK veľa zdaru, keby bol problém, daj vedieť
Robo pozeram na ten tvoj subor, co si mi poskytol a vyzera to super.
Este jedna vec, da sa ako som pisal v tom MsgBox-e priamo napisat, ze ktore stlpce nie su vyplnene?, napr. v tomto tvojom pripade dajme tomu, ze zadavatel nevyplneni nic do bunky v stlpci C a ani D, tak v MsgBox-e bude hlaska, "Vyplnte pole C a D", alebo ked chyba udaj len v poli C, tak vypise "Vyplne pole C". Ci toto je uz moc zlozite? Dakujem!
Som na tablete, poslem Ti to vecer. Ak vsak povies, ktore stlce su povinne, urobim Ti to rovno na ne...
Su to tie D, G, H a J, ako pises v prvom dotaze? Ale dalej spominas az 6 povinnych udajov...
Okrem toho je mozne prednastavit bunky na ocakavany typ vstupnych udajov, aby si vylucil nespravne udaje... Napr v danom stlpci maju byt ciselne hodnoty v rozsahu od do... V inom stlpci napr polozka z preddefinovaneho zoznamu a pod... Toto poznas? Tiez sa to moze hodit...
Tak tu to máš...
Rozšíril som Ti tabuľku, aby si mal pripravený kód na 6 povinných údajov (budeš si musieť upraviť podľa toho, ktoré stĺpce sú u teba povinné)
Urobil som Ti do toho ešte nejaké drobnosti, napr. v prípade, že nie je niektorá povinná bunka posledného riadka vyplnená, po ozname sa aktivuje prvá z nenaplnených povinných buniek, čiže si pripravený priamo v bunke, do ktorej je treba zadať údaj.
Ďalej tam máš odskok na makro "Suhlas" doplnený MsgBoxom, informujúcim o tom, že ho máš nahradiť úkonmi, ktoré sa majú vykonať v prípade, že sú všetky povinné údaje zadané.
Po vykonaní makra Suhlas sa postup vráti do makra "Kontrola", kde sa celý proces ukončí uložením a zatvorením zošita (musíš odstrániť apostrof, ktorý z riadka robí komentár).
Do stĺpca E som Ti dal ukážku na overenie údajov. Je to nastavené tak, že neprijme inú hodnotu, než celé číslo v rozsahu od 0 do 50 (to robí Excel sám osebe nástrojom "overenie údajov")
Skús...
Dik Robo! No da sa povedat, ze to mam spravene zatial takto. Je to vyhovujuce zatial, v tom tvojom priklade mi nefungovala ta kontrola aktivneho riadku, ked som pouzil tvoj kod a napr. prvy riadok bol cislo 6, tak stale mi MsgBox vypisoval, ze udaje nie su v riadku dva tusim, neslo mi to zmenit, tak som pouzil iny kod na kontrolu, ktory funguje dobre. Ale stala sa dnes taka velmi cudna vec. Dany subor som vyplnil, odoslal uzivatelovi, vyplnil, prislo to mne (oznamenie do mailu) a na mojom pocitaci som ho zase otvoril a makra priradene tlacidlam totalne prestali fungovat, nevypise ani ziadny error, nic. Ale ked ten subor otvorim na hocijakom inom pocitaci, tak normalne funguje. Nechapem tomu, co sa tam mohlo u mna stat? A zaloha toho suboru mi funguje normalne, len po ulozeni druhym uzivatelom, ked ho zase otvorim, tak klikam na tlacidla a nic. Subor je na sieti. Nechapem tomu.
a) problém, prečo Ti nefungovalo priradenie správnej hodnoty premennej PoslRiadok je ten, že som nevedel, že začínaš s údajmi od šiesteho riadka.
V mojom kóde si Excel vyhľadá posledný riadok s použitím Aktuálnej oblasti (CurrentRegion), pričom začína od bunky A1.
Pri výbere aktuálnej oblasti musíš byť nastavený do ľubovoľnej bunky CELISTVEJ oblasti (t.j. neprerušenej nejakým prázdnym riadkom!), čo nebolo splnené, keďže medzi bunkou A1 a šiestym riadkom, ktorým začínaš, je prázdny minimálne jeden riadok (počínajúc riadkom 2, kde Ti to z tohto dôvodu zahlásilo, že Ti chýbajú údaje).
Stačí upraviť:
PoslRiadok = Range("A6").CurrentRegion.Rows.Count
pod podmienkou, že začiatok súvislej údajovej tabuľky je v bunke A6.
b) neviem, či si si prehliadol poslednú moju prílohu, lebo tam som Ti urobil aj to, čo si chcel, aby Ti MsgBox vypísal aj konkrétne stĺpce, v ktorých nie sú naplnené povinné údaje. V priloženom kóde to nemáš zapracované...
Teraz pozeram Robo ten tvoj file, zapracujem neskor, len ma teraz trapi, ze preco po ulozeni uzivatelom, ked mne nasledne pride mail a dany subor otvorim, tak tlacidla vobec nefunguju. Na inom pocitaci, ked otvorim ten isty subor, tak to funguje. A co mam zalohu toho suboru na svojom disku v pocitaci, ta funguje.
Jasne, tu bunku som zmenil na A6, to som spravil ako prve, ale aj tak mi to nefungovalo.
Nechápem... ale spomínaš "tlačidlá" ...
Prečo množné číslo? Koľko ich tam máš?
Jediné, čo ma napadá, je, že adresát zakázal spúšťanie makier...
Keď otváraš, nepýta sa ťa na povolenie obsahu?
dve tlacidla....kazde kontroluje ine bunky a odosiela inym osobam....mozes mi dat robo nejaky mail?, poslem ti ten file...
Ale... napadá ma, že píšeš, že na iných pc to funguje... to si odporuje.
A u Teba pôvodný ide tiež... hm...
Pozriem sa na to keď mi to zašleš. Mail som Ti zaslal, môžeš mi to poslať ako odpoveď...
Má prípadne niekto z priateľov na poradni tip, prečo mu nejde spúšťať makrá po návrate od adresáta, pričom na iných pc to ide a pôvodný záložný súbor mu na makrá reaguje?
Please help!
prišiel Ti mail odo mňa?
si tu?
robo nemam tvoj mail...
to co je v kode nie je moj mail, ak si ho posielal tam
...posli mi na kovino@seznam.cz dakujem
oups :D ok
poslal som...
mas to v maili...dik
ok, pozriem
tak za prvé... pre Teba je prvá bunka celistvej oblasti bunka A9. Preto miesto A6 musíš dať A9 (proste medzi údajmi a záhlavím nesmie byť voľný riadok...
za druhé, bez hesla kód neskontrolujem ;) a klikať na to nechcem, aby sa to neodosielalo... Zablokovať časti kódu komentármi bez hesla neviem...
za ďalšie, použil si iný typ ovládacieho prvku - ActiveX navyše sa mi zdá, že si ich nechal v režime návrhu...
Môj pôvodný súbor mal typ Ovládací prvok formulára...
Možno máš zakázané prvky ActiveX... Ak tam dáš ten jednoduchší typ, určite to pôjde (a pôjde to na všetkých compoch), keďže ako vravíš, pôvodný záložný súbor Ti funguje...
robo heslo bolo v dalsom maili:)....dal som ten zakladny ActiveX button. ActiveX mam povolene. Da sa na normalnom zakladnom buttone zmenit farba?
len farba písma, nie pozadia...
Je mi však záhadou, ak to pred odoslaním u Teba fungovalo...
Poriešime na maili ok?
nechtiac bol zaslaný mail Marekovi... neozval sa?
Že sa ospravedlňujem ;)
Máš tam mail...