Da budemo precizniji ne radi se o tri petlje nego o tri
strukture.
a/ With...End With
b/ If...End If - uslovno grananje
c/ Do...Loop - petlja
With...End With jednostavno omogućuje skraćeno pisanje. Npr. .Find(2, lookin:=xlValues) bez navodjenja objekta Range na koji se ova komanda odnosi. Ovu strukturu lako možemo zanemariti, ako kod malo prepravimo. Čini mi se da je kod u tom slučaju čitljiviji - lakše ga je pratiti.
Code:
Set rngPretraga = Worksheets(1).Range("a1:a500")
Set c = rngPretraga.Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = rngPretraga.FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
Evo sad kratko objašnjenje. Komanda
Code:
Set c = rngPretraga.Find(2, LookIn:=xlValues)
Trazi prvo pojavljivanje "2" u zadatom opsegu.
Code:
If Not c Is Nothing Then
Ispituje se da li je nešto nadjeno, i ako nije ide se iza End If. Ako jeste čuva se adresa prvog nadjenog pojavljivanja
Code:
firstAddress = c.Address
i izvršava se Do ... Loop petlja.
U petlji se zamenjuje na mestu prvog pojavljivanja upisuje 5 (takav je primer tu treba ubaciti akciju koju ti želiš)
Code:
c.Value = 5
i traži sledeće pojavljivanje
Code:
Set c = rngPretraga.FindNext(c)
Ukoliko postoji samo jedno pojavljivanje findNext će naći isto kao prvo, pa će se petlja izvrašavati samo ako je adresa sledećeg pojavljivanja različita od adrese prvog pojavljivanja i ako je nešto nađeno funkcijom findNext
Code:
Loop While Not c Is Nothing And c.Address <> firstAddress
I na kraju evo kako bi izgeldalo tvoj kod sa find. Pošto tražiš samo prvu vrednost praktično bi se oslobodio jedne petlje For...Next
Code:
Private Sub optBrisanje_Click()
Dim intRow As Long
Dim rb As Range
Dim rngTest As Range
If txt9.Value <> "" Then
' Sheets("BAZA").Select - ovo nije potrebno jer naknadno pozivas Sheets("BAZA")
'PRONALAZI BROJ 'rb' I BRISE CEO TAJ RED
Set rngTest = Sheets("BAZA").Range("A2:A500")
Set rb = rngTest.Find(txt9.Value, LookIn:=xlValues)
If Not rb Is Nothing Then
intRow = rb.Row
rb.EntireRow.Delete Shift:=xlUp ' brise ceo red u Sheetu "BAZA"
Worksheets(2).Rows(intRow).Delete ' brise isti red u Sheet 2
End If
End If
End Sub
Srećni praznici!
[Naknadno zamenjeno strSearch sa txt9.Value. Ja sam straSearch korisitio da bih lakše testirao]
[Ovu poruku je menjao Jpeca dana 01.01.2010. u 13:45 GMT+1]
Nije to loše Rembrante, samo što ne bi dodao još malo boje?