[ savetnik.org @ 29.07.2010. 14:08 ] @
| 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. |
[ neptuncokg @ 29.07.2010. 17:46 ] @
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
[ savetnik.org @ 30.07.2010. 00:41 ] @
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.
[ neptuncokg @ 01.08.2010. 12:57 ] @
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
[ todra @ 01.08.2010. 18:03 ] @
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.
[ savetnik.org @ 02.08.2010. 00:05 ] @
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...
[Ovu poruku je menjao savetnik.org dana 02.08.2010. u 01:19 GMT+1]
[Ovu poruku je menjao savetnik.org dana 02.08.2010. u 01:23 GMT+1]
[ savetnik.org @ 02.08.2010. 00:11 ] @
E Ratko izvini ali nisam baš razumeo kako da primenim ovo u mojoj tabeli
[ neptuncokg @ 02.08.2010. 01:38 ] @
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.
[ todra @ 07.08.2010. 18:09 ] @
Dodao sam formulu za redni broj.
Pozdrav!
[ savetnik.org @ 09.08.2010. 01:10 ] @
E to mi je falilo hvala puno!
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.