Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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!

Předmět Autor Datum
akosi nechápem... kontrolovať aktívny riadok nie je problém ( napr. Range ("D"& ActiveCell.Row)...)… nový
robert13 25.06.2015 15:46
robert13
Dik Fero za info. 1) Zadavatel otvori dany excel a do volneho riadku musi zapisat napr. do 15tich b… nový
Fero1313 25.06.2015 17:43
Fero1313
Samozrejme dik Robo:) nový
Fero1313 25.06.2015 19:10
Fero1313
Excel - VBA - Nalezení posledního obsazeného řádku: PosledniPlnyRadek = Cells(Rows.Count, "A").End(… nový
MachR55 25.06.2015 15:49
MachR55
Prikladám riešenie (pokiaľ som Tvoju potrebu dobre pochopil...) Uprav si ho podľa potreby, určite to… nový
robert13 25.06.2015 20:28
robert13
Dik moc Robo, zajtra to otestujem. Vzdy sa bude vyplnat len jeden riadok, ale dakujem za doplnujuce… nový
Fero1313 25.06.2015 21:20
Fero1313
OK veľa zdaru, keby bol problém, daj vedieť nový
robert13 25.06.2015 21:23
robert13
Robo pozeram na ten tvoj subor, co si mi poskytol a vyzera to super. Este jedna vec, da sa ako som p… nový
Fero1313 25.06.2015 21:33
Fero1313
Som na tablete, poslem Ti to vecer. Ak vsak povies, ktore stlce su povinne, urobim Ti to rovno na ne… nový
robert13 26.06.2015 17:28
robert13
Tak tu to máš... Rozšíril som Ti tabuľku, aby si mal pripravený kód na 6 povinných údajov (budeš si… nový
robert13 26.06.2015 19:48
robert13
Dik Robo! No da sa povedat, ze to mam spravene zatial takto. Je to vyhovujuce zatial, v tom tvojom p… nový
Fero1313 29.06.2015 11:12
Fero1313
Private Sub CommandButton1_Click() PoslRiadok = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, L… nový
Fero1313 29.06.2015 11:13
Fero1313
a) problém, prečo Ti nefungovalo priradenie správnej hodnoty premennej PoslRiadok je ten, že som nev… nový
robert13 29.06.2015 11:27
robert13
Teraz pozeram Robo ten tvoj file, zapracujem neskor, len ma teraz trapi, ze preco po ulozeni uzivate… nový
Fero1313 29.06.2015 11:37
Fero1313
Jasne, tu bunku som zmenil na A6, to som spravil ako prve, ale aj tak mi to nefungovalo. nový
Fero1313 29.06.2015 11:38
Fero1313
Nechápem... ale spomínaš "tlačidlá" ... Prečo množné číslo? Koľko ich tam máš? Jediné, čo ma napadá,… nový
robert13 29.06.2015 11:41
robert13
dve tlacidla....kazde kontroluje ine bunky a odosiela inym osobam....mozes mi dat robo nejaky mail?,… nový
Fero1313 29.06.2015 11:43
Fero1313
Ale... napadá ma, že píšeš, že na iných pc to funguje... to si odporuje. A u Teba pôvodný ide tiež..… nový
robert13 29.06.2015 11:51
robert13
prišiel Ti mail odo mňa? nový
robert13 29.06.2015 12:07
robert13
si tu? nový
robert13 29.06.2015 12:19
robert13
robo nemam tvoj mail... nový
Fero1313 29.06.2015 12:20
Fero1313
to co je v kode nie je moj mail, ak si ho posielal tam:))...posli mi na kovino@seznam.cz dakujem nový
Fero1313 29.06.2015 12:21
Fero1313
oups :D ok poslal som... nový
robert13 29.06.2015 12:22
robert13
mas to v maili...dik nový
Fero1313 29.06.2015 12:29
Fero1313
ok, pozriem nový
robert13 29.06.2015 12:30
robert13
tak za prvé... pre Teba je prvá bunka celistvej oblasti bunka A9. Preto miesto A6 musíš dať A9 (pros… nový
robert13 29.06.2015 12:37
robert13
robo heslo bolo v dalsom maili:)....dal som ten zakladny ActiveX button. ActiveX mam povolene. Da sa… nový
Fero1313 29.06.2015 12:45
Fero1313
len farba písma, nie pozadia... Je mi však záhadou, ak to pred odoslaním u Teba fungovalo... Porieši… nový
robert13 29.06.2015 13:12
robert13
nechtiac bol zaslaný mail Marekovi... neozval sa? Že sa ospravedlňujem ;) poslední
robert13 29.06.2015 13:25
robert13
Máš tam mail... nový
robert13 29.06.2015 13:10
robert13

Dik Fero za info.

1) Zadavatel otvori dany excel a do volneho riadku musi zapisat napr. do 15tich buniek nejake udaje, z coho 6 udajov je povinnych. Vsetko vypise, ked je to v poriadku, tak stlaci tlacidlo, dany obsah sa ulozi, excel sa zatvori a dalsej osobe sa odosle mail o oznameni, ze boli v danom subore vykonane zmeny. Vsetko mi funguje, jedinu vec, ktoru nemam poriesenu je ta kontrola povinnych buniek v tom riadku, ktory dany zadavatel vyplna. Je to vzdy posledny volny riadok, ktory bude vypisovat, ked dany subor otvori.

2) Vseobecny MsgBox mi funguje, ale ak sa to da este vysperkovat, tak da sa spravit, ze v tom MsgBox-e mi vypise, ze presne ktore z tych povinnych buniek nie su vypisane?

Dakujem!

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

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.

Private Sub CommandButton1_Click()


        PoslRiadok = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row
    
    'PoslRiadok = ActiveSheet.Cells(ActiveSheet.Rows.Count, col).End(xlUp).Row
If Range("D" & PoslRiadok) <> "" And Range("E" & PoslRiadok) <> "" And Range("H" & PoslRiadok) <> "" And Range("I" & PoslRiadok) <> "" And Range("K" & PoslRiadok) <> "" And Range("L" & PoslRiadok) <> "" And Range("M" & PoslRiadok) <> "" And Range("N" & PoslRiadok) <> "" And Range("O" & PoslRiadok) <> "" And Range("P" & PoslRiadok) <> "" And Range("Q" & PoslRiadok) <> "" And Range("R" & PoslRiadok) <> "" And Range("U" & PoslRiadok) <> "" And Range("V" & PoslRiadok) <> "" And Left(Range("D" & PoslRiadok), 1) <> " " And Left(Range("E" & PoslRiadok), 1) <> " " And Left(Range("H" & PoslRiadok), 1) <> " " And Left(Range("I" & PoslRiadok), 1) <> " " And Left(Range("K" & PoslRiadok), 1) <> " " And Left(Range("LH" & PoslRiadok), 1) <> " " And Left(Range("M" & PoslRiadok), 1) <> " " And Left(Range("N" & PoslRiadok), 1) <> " " And Left(Range("O" & PoslRiadok), 1) <> " " And Left(Range("P" & PoslRiadok), 1) <> " " And Left(Range("Q" & PoslRiadok), 1) <> " " _
And Left(Range("R" & PoslRiadok), 1) <> " " And Left(Range("U" & PoslRiadok), 1) <> " " And Left(Range("V" & PoslRiadok), 1) <> " " Then
        MsgBox "Click OK, your request is going to be sent and this file closed:)", vbOKOnly, "All mandatory fields filled in:)"
        
        ActiveWorkbook.Save
    Dim Outlook As Object, EMail As Object

Set Outlook = CreateObject("Outlook.Application")

Set EMail = Outlook.CreateItem(0)

With EMail
    .To = "fero@fero.com"
    .CC = ""
    .BCC = ""
    .Subject = "BD/CD take care of new Item from requestor:)"
    .Body = "<\\10.196.196.10\xxx\request.xlsm>"

    .Send
    
End With


Set EMail = Nothing

Set Outlook = Nothing

ActiveWorkbook.Close
        Exit Sub
        Else: MsgBox "Row " & PoslRiadok & " contains unfilled mandatory data:(, Fill them in and send your request again!", vbOKOnly, "Warning!"
    End If
   
End Sub

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.

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!

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

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