[ 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 |
[ predajr @ 16.11.2005. 23:05 ] @
[ 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...?
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|