Imam tabelu sa nekoliko redova, napravo sam dva makroa jedan za dodavanje novog reda sa formatiranim ćelijama a drugi za brisanje. E sad problem mi je što kod dodavanja reda dodajem uvek novi iznad totala i to nekako funcioniše ali kod brisanja reda ako nije selektovan red koji hocu da obrišem on obriše bilo koji koji je selektovan ali ajde nekako to mogu i da rešim sa nekom napomenom da pre brisanja selektuju red koji hoće da brišu. ali ono što me zanima jeste kako da kada dođe do reda u kome se nalazi total zabranim brisanje tog reda koji nije uvek u istom redu ali ima sadržaj u ćeliji "SVEGA" ili "TOTAL" u B, G ili bilo kojoj koloni. Bilo bi dobro da jo[ i dodam msgbox tipa "OAVJ RED SE NE MOZE OBRISATI" ali svakako mi je vaznije da stvarno i ne moze.
Zabrana brisanja reda total
Zaključano
Zakačeno
Malo je nejasno sve to bez primera (bolje da si okacio taj cod kojim brises redove). Baci pogled na ovu temu:http://www.elitesecurity.org/t386414-0#2481133
Tu je JPeca dao mali kurs brisanja redova, zavisno od nekog uslova.
Ako je kod tebe to jednostavno - "neki opseg ...ClearContents" (samo nagadjam), onda dodaj jedan IF da sprecis brisanje tog reda - npr.11, ako je npr. u "C11" - total, odnosno "Svega". Nesto kao (sve naprimer) :
If Range("C11") <> "Svega" Then (.....neki opseg). Clear / ClearContents...
Pogledaj ipak gornju temu, zaista mnogo govori o brisanju redova. Ako ne pomogne okaci tvoj primer. Pozdrav
Tu je JPeca dao mali kurs brisanja redova, zavisno od nekog uslova.
Ako je kod tebe to jednostavno - "neki opseg ...ClearContents" (samo nagadjam), onda dodaj jedan IF da sprecis brisanje tog reda - npr.11, ako je npr. u "C11" - total, odnosno "Svega". Nesto kao (sve naprimer) :
If Range("C11") <> "Svega" Then (.....neki opseg). Clear / ClearContents...
Pogledaj ipak gornju temu, zaista mnogo govori o brisanju redova. Ako ne pomogne okaci tvoj primer. Pozdrav
Evo zakačio sam primer pa ako neko bude mogao da pomogne neka bude što jasniji pošto nisam baš vešt sa VBA.
Osim ovog problema imam pitanje i za redni broj pošto koristim funkciju =IF(B13="";"";1) za prvi redni broj a posle za svaki sledeć =IF(B14="";"";A13+1), pa me zanima da li postoji neko jednostavnije ili naprednije rešenje za redni broj da u formi ne koristim kao osnovu dva reda nego samo jedan a da mi makro dodaje sledeći ili kod brisanja ako neko obriše red iz sredine da se ažurira.
Osim ovog problema imam pitanje i za redni broj pošto koristim funkciju =IF(B13="";"";1) za prvi redni broj a posle za svaki sledeć =IF(B14="";"";A13+1), pa me zanima da li postoji neko jednostavnije ili naprednije rešenje za redni broj da u formi ne koristim kao osnovu dva reda nego samo jedan a da mi makro dodaje sledeći ili kod brisanja ako neko obriše red iz sredine da se ažurira.
Kao sto rekoh u prvom odgovoru, samo je trebalo dodati jedan IF u codu, pre brisanja. Preradio sam malo tvoj primer (kod mene je Excel-2003), i trebalo bi da ti zavrsi posao. U polju "SVEGA" sam pobrisao spejsove ispred "S". Sto se tice rednog broja, malo je nezgodno u tvom slucaju, zbog one donje tabele. Ja sam ti promenio funkciju u "A" koloni, pa vidi da li ti je tako bolje. Ako nije, ti vrati tvoju funkciju. Pozdrav
Za redni broj ovo je super. Prilagodi.
Primer: u A1 unesi
=SUBTOTAL(3;$B$1:B1)
i razvuci u ostale ćelije kolone A
Sve najbolje.
Ratko.
Primer: u A1 unesi
=SUBTOTAL(3;$B$1:B1)
i razvuci u ostale ćelije kolone A
Sve najbolje.
Ratko.
izmenjeno 2 puta, poslednji put savetnik.org 02.08.2010. u 01:23
Izmene poruke
- savetnik.org02.08.2010. u 01:23zapis iz teksta poruke
- savetnik.org02.08.2010. u 01:19zapis iz teksta poruke
Hvala puno probao sam ja sa nekim IF ali nije ni približno uspelo. Samo nisam shvatio koji deo koda mu je zabranio brisanje.
If Range("B15").Value = "SVEGA" Then MsgBox "OVAJ RED SE NE MOZE OBRISATI !", vbInformation: Exit Sub
I još samo jedno pitanjce ovde si postavio Range("B15") a jel može da Range bude u bilo kojoj B ćeliji mislim da ukoliko dodam još neku kolonu iznad tabele...
If Range("B15").Value = "SVEGA" Then MsgBox "OVAJ RED SE NE MOZE OBRISATI !", vbInformation: Exit Sub
I još samo jedno pitanjce ovde si postavio Range("B15") a jel može da Range bude u bilo kojoj B ćeliji mislim da ukoliko dodam još neku kolonu iznad tabele...
E Ratko izvini ali nisam baš razumeo kako da primenim ovo u mojoj tabeli
Pa taj red koji si citirao je zabrana brisanja. ---If Range("B15").Value = "SVEGA" Then MsgBox "OVAJ RED SE NE MOZE OBRISATI !", vbInformation: Exit Sub---
U prevodu - Ako je u B15 "SVEGA" sledi poruka o zabrani i obustava procedure (Exit Sub). Mozes ti bilo gde da stavis "SVEGA", i u kodu da promenis referencu (naprimer - umesto "If Range("B15")...", stavi "If Range("B199")...". Samo da ti u "B199" bude SVEGA, i bez spejsova. Dodavanjem redova (tvoje dugme - NOVI RED) ti remetis adresu celije gde je "SVEGA". Tako omogucavas brisanje redova, sve do trenutka kad "SVEGA" ponovo bude u "B15" ili recimo u "B199". Takva ti je struktura tabele koju si postavio. Ja bih ipak razmislio o brisanju opsega celija metodom ClearContents, umesto sto brises seo red. Naprimer - umesto tvog coda
Rows("15:15").Select
Selection.Delete Shift:=xlUp 'brisanje celog 15.reda
treba probati sa
Range("B15:L15").Select
Selection.ClearContents 'brisanje podataka u 15.redu (od B-l)
Time cuvas strukturu redova, sa svim funkcijama i ne brines o dodavanju novog reda pre brisanja. Treba, doduse, posle ClearContents izvrsiti sortiranje cele tabele po nekom kriterijumu ("DATA-SORT...") da bi se sve skockalo, ali sve to moze kao i tvoj makro da se snimi (Record-om) i po potrebi preradi. Pozdrav.
U prevodu - Ako je u B15 "SVEGA" sledi poruka o zabrani i obustava procedure (Exit Sub). Mozes ti bilo gde da stavis "SVEGA", i u kodu da promenis referencu (naprimer - umesto "If Range("B15")...", stavi "If Range("B199")...". Samo da ti u "B199" bude SVEGA, i bez spejsova. Dodavanjem redova (tvoje dugme - NOVI RED) ti remetis adresu celije gde je "SVEGA". Tako omogucavas brisanje redova, sve do trenutka kad "SVEGA" ponovo bude u "B15" ili recimo u "B199". Takva ti je struktura tabele koju si postavio. Ja bih ipak razmislio o brisanju opsega celija metodom ClearContents, umesto sto brises seo red. Naprimer - umesto tvog coda
Rows("15:15").Select
Selection.Delete Shift:=xlUp 'brisanje celog 15.reda
treba probati sa
Range("B15:L15").Select
Selection.ClearContents 'brisanje podataka u 15.redu (od B-l)
Time cuvas strukturu redova, sa svim funkcijama i ne brines o dodavanju novog reda pre brisanja. Treba, doduse, posle ClearContents izvrsiti sortiranje cele tabele po nekom kriterijumu ("DATA-SORT...") da bi se sve skockalo, ali sve to moze kao i tvoj makro da se snimi (Record-om) i po potrebi preradi. Pozdrav.
Dodao sam formulu za redni broj.
Pozdrav!
Pozdrav!
E to mi je falilo hvala puno!