Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[VBA] Elegantnije punjenje listboxa

[es] :: Office :: [VBA] Elegantnije punjenje listboxa

[ Pregleda: 2507 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

anakin14

Član broj: 73683
Poruke: 862
79.101.151.*



+136 Profil

icon [VBA] Elegantnije punjenje listboxa18.03.2008. u 13:56 - pre 195 meseci
Code:

Sub lista()
Sheets("pomocni").Select
Range("a2:n" & Range("a65000").End(xlUp).row + 1).ClearContents
Application.CutCopyMode = False
Sheets("baza podataka").Select
ListBox1.Clear
 Selection.AutoFilter Field:=1, Criteria1:=Format(dat(1), "d-mmm")
 Selection.AutoFilter Field:=2, Criteria1:=obj(1)
 Selection.AutoFilter Field:=3, Criteria1:=kont(1)
 Selection.AutoFilter Field:=4, Criteria1:=dob(1)

If Range("a65000").End(xlUp).row > 1 Then
p = Range("a65000").End(xlUp).row
Range("a2:n" & p).Copy
    Sheets("pomocni").Select
    Range("A2").Select
    ActiveSheet.Paste
    tabela = Range("a2:n" & Range("a65000").End(xlUp).row)
For p = 1 To UBound(tabela)
With ListBox1
    .AddItem tabela(p, 1)
    .List(ListBox1.ListCount - 1, 0) = tabela(p, 1)
    .List(ListBox1.ListCount - 1, 1) = tabela(p, 2)
    .List(ListBox1.ListCount - 1, 2) = tabela(p, 3)
    .List(ListBox1.ListCount - 1, 3) = tabela(p, 4)
    .List(ListBox1.ListCount - 1, 4) = tabela(p, 6)
    .List(ListBox1.ListCount - 1, 5) = tabela(p, 7)
    .List(ListBox1.ListCount - 1, 6) = tabela(p, 8)
    .List(ListBox1.ListCount - 1, 7) = tabela(p, 9)
    .List(ListBox1.ListCount - 1, 8) = tabela(p, 10)
    .List(ListBox1.ListCount - 1, 9) = tabela(p, 5)
    .TopIndex = .ListCount - 1
 End With
Next p

Sheets("baza podataka").Select
If ActiveSheet.FilterMode Then
    ActiveSheet.ShowAllData
  End If
Range("a1").End(xlDown).Offset(1, 0).Select
End Sub



Kao sto vidite da bi napunio listbox, prvo filterujem bazu podataka tako da ostanu podaci kojima zelim da je napunim, pa ih kopiram u pomocni sheet pa promenjlivoj tabela (variant) dodeljujem range iz pomocnog sheeta pa onda punim sa njim listbox... Mislim da sigurno postoji elegantnije resenje da popunim listbox podacima iz baze po zadatim kriterijumima (dat,kont,obj,dob).

Hvala puno na pomoci i pozdrav!!!
 
Odgovor na temu

Jpeca
Predrag Jovanović
poslovni analitičar
Gowi
Pančevo

Moderator
Član broj: 25683
Poruke: 2268
*.bisinter.net.

Sajt: www.gowi.rs


+109 Profil

icon Re: [VBA] Elegantnije punjenje listboxa18.03.2008. u 19:55 - pre 195 meseci
Nisam ispratio ceo primer (lakše bi mi bilo kad bih imao i odgovarajuću tabelu), ali jedan od problema je da izbegneš kopiranje nakon postavljanja autofiltra

Rešenje bi bilo da nakon postavljanja autofiltar prođeš petljom kroz sve redove i ispitaš da li je red iz filtriranog opsega ili ne (Hidden = true)
Code:

For r = 2 To rwKraj                                    ' Za sve redove iz originalnog (nefiltriranog) opsega 
   If shP.Rows(r).Hidden Then GoTo Sledeci    ' Preskoci skrivene redove
   ' Sad dodaj u list box
   End if 
Sledeci:
Next r 



Nije to loše Rembrante, samo što ne bi dodao još malo boje?
 
Odgovor na temu

anakin14

Član broj: 73683
Poruke: 862
79.101.151.*



+136 Profil

icon Re: [VBA] Elegantnije punjenje listboxa19.03.2008. u 10:02 - pre 195 meseci
Ali cini mi se da se sa kopiranjem manje vremena trosi nego sa petljom jer petlja opet mora da prodje kroz 30000 slogova i da proveri koji je hidden koji nije...

Na koji nacin u izvornom kodu uopste funkcionise komanda SELECT u SQL-u ?
 
Odgovor na temu

Jpeca
Predrag Jovanović
poslovni analitičar
Gowi
Pančevo

Moderator
Član broj: 25683
Poruke: 2268
212.200.27.*

Sajt: www.gowi.rs


+109 Profil

icon Re: [VBA] Elegantnije punjenje listboxa20.03.2008. u 10:59 - pre 195 meseci
Što se tiče efikasnosti možeš direktno da pridružiš izvor podataka list boxu preko svojstva RowSorce
Code:
Me.ListBox1.RowSource = "Sheet2!A1:N3000"

ali pošto ti je redosled kolona u list boxu različit od onog u opsegu ne znam da li ti ovo odgovara.

Citat:
Na koji nacin u izvornom kodu uopste funkcionise komanda SELECT u SQL-u ?

Ako je to bilo pitanje, za čitanje iz neke baze podataka, nakon što uspostaviš konekciju sa bazom metodom Execute Connection objekta dobiješ podatke u record set
Code:

Dim oConn As ADODB.Connection
Dim sConn As String
Dim oRS As ADODB.Recordset
Dim oRSKupac As ADODB.Recordsetđ
...
Set oConn = New ADODB.Connection
oConn.ConnectionString = sConn
oConn.Open
Set oRS = oConn.Execute(sSQL)
' Korstiš record set 


gde je sSQL - SQL komanda kao običan string (između znaka navoda)
Nije to loše Rembrante, samo što ne bi dodao još malo boje?
 
Odgovor na temu

anakin14

Član broj: 73683
Poruke: 862
79.101.151.*



+136 Profil

icon Re: [VBA] Elegantnije punjenje listboxa20.03.2008. u 11:34 - pre 195 meseci
ovo sa rowsoruce bi odgovaralo samo ako mogu da pridruzim recimo range("a1:n3000") samo visible cells?
Jel moze ovako?
 
Odgovor na temu

[es] :: Office :: [VBA] Elegantnije punjenje listboxa

[ Pregleda: 2507 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.