[ predajr @ 16.11.2005. 23:05 ] @
Zna li neko ekvivalent Excel-ove f-je =SEARCH(Text1,Text2,broj) u VBA,
npr: hteo bih da uporedim spisak iz kolone C , sa nekom reci koja je uneta u TextBox1 a da ne koristim f-je vec samo VBA
[ vujkev @ 17.11.2005. 12:46 ] @
Možda je malo glupo, ali radi

Code:

Dim x as long 

for x = 1 to <koliko god redova imaš>
   if sheet1.cell(x, 3).text = text1.text then  'nisam siguran da li prvo ide red pa kolona ili obrnuto
     ' tekst je isti
   else
     ' text je različit
   end if 
next


Možda kod nije 100% ispravno napisan, ali predpostavljam da shvataš poentu
[ Marko_L @ 17.11.2005. 17:24 ] @
Tako nešto, mada je možda bolje koristiti Range (ako ništa drugo mislim da će ići brže).Nešto ovako
Code:
Dim celija As Range
For Each celija In Workbooks(1).Worksheets(1).Range("C1:C100") 'umesto 100 stavi koliko redova imas
If celija.Value = Text1.Text Then
'postoji vrednost
Else
'ne postoji vrednost
Next celija
End If


[Ovu poruku je menjao Marko_L dana 17.11.2005. u 18:25 GMT+1]
[ quattor @ 17.11.2005. 20:15 ] @
Uradi ovako: Ukljuci snimanje makroa i pokreni pretragu... Zatim iskljuci snimanje makroa i u VB editoru pogledaj sta ti je Excel isprogramirao. Zatim se sa tim poigraj i optimizuj.

Pozdrav.
[ Marko_L @ 17.11.2005. 21:14 ] @
Može, samo što će onda dobiti rešenje sa Find funkcijom koja vraća error ako vrednost koja je zadata kao what parametar ne postoji ni u jednoj ćeliji, tako da bi morao da, umesto prostog If...Then...Else...End If, za pronađeni parametar koristi If, a ako nije pronađen da radi error hendling, što može doneti problem, ukoliko u istom makrou postoji neka druga greška.Po meni je to bespotrebno komplikovanje.Ukoliko vrednost koju traži sigurno postoji u nekoj ćeliji, onda to nije problem.
[ quattor @ 18.11.2005. 11:04 ] @
Error handling ce odraditi posao bez problema - ma sta jos radio u makrou. Jednostavno se treba poigrati sa time. Inace ove built-in f-je rade daleko brze od svega drugog, a sam sam ih koristio bezbroj puta... bez ikakvih problema (doduse u Wordu).

Pozdrav.
[ predajr @ 18.11.2005. 22:51 ] @
U stvari hteo sam da od niza imena koji se nalazi u koloni C, izdvojim celije koji u svojim vrednostima sadrže deo reči koji sam , recimo, uneo u TextBox1 i smesti ga u ListBox1 (bez obzira na mala i velika slova) a i ujedno bi trebao sam , tog trenutka, da izbroji redove koje treba proveravati

npr. niz u koloni C se sastoji iz imena

1 Milana
2 Milovana
3 Ana
4 Steva
5 Mika
6 Stevana
7 Sladjana
8 Milica

uneta vrednost u TextBox1 je "ANA"
a izdvojeni niz u ListBox1 trebao bi biti

1 Milana

2 Milovana
3 Ana
6 Stevana
7 Sladjana


Pa sam to rešio na ovaj način, malo je komplikovano, ali radi.



Code:

Private Sub TextBox1_Change()
    Dim A As Integer, B As Integer, C As Integer, I As Integer, Y As Integer, Zniz1 As String, Zniz2 As String
    A = 1
    frmIme.ListBox1.Clear
        Zniz1 = frmIme.TextBox1.Value
            Do Until Sheets("1").Range("C" & A) = ""
                Zniz2 = Sheets("1").Range("C" & A)
                    B = Len(Zniz1)
                    C = Len(Zniz2) - B + 1
                        Y = 0
                        For I = 1 To C
                            If Mid(LCase(Zniz2), I, B) = LCase(Zniz1) And Y = 0 Then
                                Y = Y + 1
                                frmIme.ListBox1.AddItem A & "   " & Sheets("1").Range("C" & A) 'PRIKAZUJE REDNI BROJ ĆELIJE I IZDVOJENO IME
                            End If
                        Next I
                    A = A + 1
            Loop
End Sub


U svakom slučaju hvala na trudu.

[Shadowed: dodati [code] tagovi.]

[Ovu poruku je menjao Shadowed dana 19.11.2005. u 14:10 GMT+1]
[ Marko_L @ 19.11.2005. 13:48 ] @
Pa što tako zaboga :) Evo, ovako ti je kraće.
Code:
Dim A As Integer, Zniz1 As String, Zniz2 As String
A = 1
frmime.ListBox1.Clear
Zniz1 = frmime.TextBox1.Value
Do Until Sheets("1").Cells(A, 3) = ""
Zniz2 = Sheets("1").Cells(A, 3)
If InStr(1, Zniz2, Zniz1, vbTextCompare) > 0 Then frmime.ListBox1.AddItem A & "   " & Sheets("1").Cells(A, 3)
A = A + 1
Loop

A moglo bi i još kraće ako bi izbacio string varijable, ali nema potrebe za tim.Ovako je pregledniji kod.

[Ovu poruku je menjao Marko_L dana 19.11.2005. u 14:52 GMT+1]
[ branimir.ts @ 20.11.2005. 23:24 ] @
Citat:
Marko_L: Pa što tako zaboga :) Evo, ovako ti je kraće.
A = 1
frmime.ListBox1.Clear
Zniz1 = frmime.TextBox1.Value
Do Until Sheets("1").Cells(A, 3) = ""
Zniz2 = Sheets("1").Cells(A, 3)
If InStr(1, Zniz2, Zniz1, vbTextCompare) > 0 Then frmime.ListBox1.AddItem A & " " & Sheets("1").Cells(A, 3)
A = A + 1
Loop

Samo da dodam, nakon poslednje linije, ubaci A = 1 , za svaki slucaj.


Pozdrav
[ Marko_L @ 20.11.2005. 23:34 ] @
Zašto kada ima u prvoj liniji A = 1 ? Uostalom A je lokalna varijabla tako da će svejedno čim se izvrši procedura A da bude nula, tako da mu A = 1 u poslednjoj liniji ne znači ama baš ništa.
[ branimir.ts @ 21.11.2005. 10:57 ] @
Citat:
Marko_L: Zašto kada ima u prvoj liniji A = 1 ?


Za svaki slucaj.

Pozdrav
[ Marko_L @ 21.11.2005. 16:37 ] @
Slučaj čega ? Ozbiljno pitam.Ako nešto znaš, podeli to sa nama.Jel ti se dešavalo da dobiješ pogrešan rezultat ili...?