• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

arama hızı yavaşlıyor

Katılım
30 Nisan 2007
Mesajlar
396
Excel Vers. ve Dili
Office 365
Merhaba.
Aşağıda uzman arkadaşlarımdan faydalandığım arama yapan kodlarda nasıl bir düzenleme yaparsak aramayı hızlandırabiliriz acaba? Şu an ilgili sayfada 300 satır var ama ileride 5000 adet satıra çıkabilir.Application.ScreenUpdating diye bir olay olduğunu öğrendim fakat uygulayamadım.YArdımcı olacak arkadaşlara teşekkür ederim.İyi çalışmalar.

Private Sub TextBox7_Change()
Set SR = Sheets("RAYİC")
If OptionButton1 = False And OptionButton2 = False And OptionButton3 = False Then
MsgBox "Lütfen arama kriterini seçiniz !", vbCritical, "Dikkat !"
Exit Sub: End If

ListView1.ListItems.Clear

If OptionButton1 = True Then Set ALAN = Range("A3:A" & [A65536].End(3).Row)
If OptionButton2 = True Then Set ALAN = Range("B3:B" & [B65536].End(3).Row)
If OptionButton3 = True Then Set ALAN = Range("F3:F" & [B65536].End(3).Row)

If OptionButton1 = True Then Set BUL = ALAN.Find(TextBox7.Text & "*", LookAt:=xlWhole)
If OptionButton2 = True Then Set BUL = ALAN.Find("*" & TextBox7.Text & "*")
If OptionButton3 = True Then Set BUL = ALAN.Find("*" & TextBox7.Text & "*")



If Not BUL Is Nothing Then
Adres = BUL.Address
Do
satır = BUL.Row
With ListView1
.ListItems.Add , , SR.Cells(satır, 1)
X = X + 1
.ListItems(X).ListSubItems.Add , , SR.Cells(satır, 2)
.ListItems(X).ListSubItems.Add , , SR.Cells(satır, 3)
.ListItems(X).ListSubItems.Add , , SR.Cells(satır, 4)
.ListItems(X).ListSubItems.Add , , SR.Cells(satır, 5)
.ListItems(X).ListSubItems.Add , , SR.Cells(satır, 6)
.ListItems(X).ListSubItems.Add , , SR.Cells(satır, 7)
SAY = SAY + 1

'eğer hücre başında (*) işareti var ise satırı kırmızı renklendir
If Left(SR.Cells(satır, 2), 1) = "*" Then
.ListItems(X).ListSubItems(1).ForeColor = vbBlue
.ListItems(X).ForeColor = vbBlue
End If

'eğer hücre başında (-) işareti var ise satırı kırmızı renklendir
If Left(SR.Cells(satır, 2), 1) = "-" Then
.ListItems(X).ListSubItems(1).ForeColor = vbRed
.ListItems(X).ForeColor = vbRed
End If

End With
Set BUL = ALAN.FindNext(BUL)
Loop While Not BUL Is Nothing And BUL.Address <> Adres
End If
Label1 = SAY & " ADET"
Set SR = Nothing
Set ALAN = Nothing
Set BUL = Nothing
End Sub
 
sn mesleki cevap i&#231;in te&#351;ekk&#252;r ederim ama maalesef kodlar&#305;n ba&#351;&#305;na ve sonuna yazd&#305;ktan sonra herhangi bir h&#305;zlanma olmad&#305;.Yinede ba&#351;ka bir fikriniz olursa sevinirim
 
Kodlar&#305;n&#305;z&#305;n ba&#351;&#305;na
Excel.Application.Calculation = xlCalculationManual

kodlar&#305;n&#305;z&#305;n sonuna
Excel.Application.Calculation =xlCalculationAutomatic

Umar&#305;m yard&#305;mc&#305; olmu&#351;tur
 
Maalesef sn peker bu da dosyay&#305; h&#305;zland&#305;ramad&#305;.Arama yaparken ve listviewe veriler gelirken ola&#287;an d&#305;&#351;&#305; g&#246;r&#252;nen bir s&#252;re ge&#231;iyor.Dosya &#351;u an 496 kb ve sadece ilgili sayfada veriler var oda 4000 sat&#305;r gibi.Uzman arkada&#351;lar&#305;mdan yard&#305;m bekliyorum l&#252;tfen.&#304;yi &#231;al&#305;&#351;malar
 
Selamlar,

Find komutu en h&#305;zl&#305; arama y&#246;ntemlerinden birisidir. San&#305;r&#305;m sizin dosyan&#305;zda bir problem var. Herhangibir aramada ge&#231;en s&#252;reyi belirtip dosyan&#305;z&#305; eklermisiniz.
 
sn COST_CONTROL dosyayı ekledim.İlginiz için teşekkür ederim.Rayiç kitabı bölümünü tıkladığımız zaman form 4-5 sn içinde açılıyor.Bu formdaki ara bölümünde aramada en az o kadar sürüyor.Dosyaya bakarsanız daha iyi anlaşılır.Şimdiden teşekkür ederim.İyi çalışmalar.
 
Ger&#231;ekte dosyan&#305;z ka&#231; sat&#305;r i&#231;eriyor?
&#304;sterseniz "DataGrid" ile yap&#305;labilir.

DataGrid nesnesine 3-4 sn. gibi zamanda 100.000'den fazla kay&#305;t listelenebiliyor.(ADO ile)
 
sn anemos &#351;u an ilgili sayfada 300 sat&#305;r var.Ama ileride 5000 sat&#305;r veriye &#231;&#305;kmas&#305; muhtemel.Bende o sayfay&#305; yakla&#351;&#305;k o 3-4 bin sat&#305;r veriye &#231;&#305;kar&#305;nca dosya a&#287;&#305;rla&#351;t&#305;.Maalesef DataGrit nesnesi ve ADO uygulamalar&#305; ile ilgili yeterli bilgim yok.Yinede bu a&#351;amada bir &#231;&#246;z&#252;m bulursan&#305;z sevinirim.&#304;yi &#231;al&#305;&#351;malar.
 
Bir &#246;rnek dosya eklerseniz &#231;ok daha h&#305;zl&#305; &#231;al&#305;&#351;acak y&#246;ntemler &#246;nerilebilir.
 
sn leventm bey &#252;stte 7.mesaj&#305;mda &#246;rnek dosyay&#305; eklemi&#351;tim.&#214;nerilerinizi bekliyorum.Te&#351;ekk&#252;r ederim.
 
Arama textbox&#305;ndaki kodu a&#351;a&#287;&#305;daki ile de&#287;i&#351;tirerek denermisiniz. San&#305;yorum ilk kodlara g&#246;re daha h&#305;zl&#305; &#231;al&#305;&#351;&#305;yor.

Kod:
Private Sub TextBox7_Change()
Set SR = Sheets("RAY&#304;C")
If OptionButton1 = False And OptionButton2 = False And OptionButton3 = False Then
MsgBox "L&#252;tfen arama kriterini se&#231;iniz !", vbCritical, "Dikkat !"
Exit Sub: End If
ListView1.ListItems.Clear
If OptionButton1 = True Then sut = 1: Set ALAN = SR.[a:a]
If OptionButton2 = True Then sut = 2: Set ALAN = SR.[b:b]
If OptionButton3 = True Then sut = 6: Set ALAN = SR.[f:f]
If sut = 1 And Len(TextBox7) < 2 Then Exit Sub
say = WorksheetFunction.CountIf(ALAN, TextBox7 & "*")
For a = 1 To say
sat&#305;r = WorksheetFunction.Match(TextBox7 & "*", SR.Range(SR.Cells(sat&#305;r + 1, sut), SR.Cells(65536, sut)), 0) + sat&#305;r
                With ListView1
                   .ListItems.Add , , SR.Cells(sat&#305;r, 1)
                    X = X + 1
                   .ListItems(X).ListSubItems.Add , , SR.Cells(sat&#305;r, 2)
                   .ListItems(X).ListSubItems.Add , , SR.Cells(sat&#305;r, 3)
                   .ListItems(X).ListSubItems.Add , , SR.Cells(sat&#305;r, 4)
                   .ListItems(X).ListSubItems.Add , , SR.Cells(sat&#305;r, 5)
                   .ListItems(X).ListSubItems.Add , , SR.Cells(sat&#305;r, 6)
                   .ListItems(X).ListSubItems.Add , , SR.Cells(sat&#305;r, 7)
                
                'e&#287;er h&#252;cre ba&#351;&#305;nda (*) i&#351;areti var ise sat&#305;r&#305; k&#305;rm&#305;z&#305; renklendir
         If Left(SR.Cells(sat&#305;r, 2), 1) = "*" Then
            .ListItems(X).ListSubItems(1).ForeColor = vbBlue
            .ListItems(X).ForeColor = vbBlue
         End If
                
                'e&#287;er h&#252;cre ba&#351;&#305;nda (-) i&#351;areti var ise sat&#305;r&#305; k&#305;rm&#305;z&#305; renklendir
         If Left(SR.Cells(sat&#305;r, 2), 1) = "-" Then
            .ListItems(X).ListSubItems(1).ForeColor = vbRed
            .ListItems(X).ForeColor = vbRed
         End If
                
                End With
        Next
        Label1 = say & "    ADET"
Set SR = Nothing
Set ALAN = Nothing
End Sub
 
Sn leventm bey &#231;ok te&#351;ekk&#252;r ederim belliki &#231;ok u&#287;ra&#351;m&#305;ss&#305;n&#305;z beyninize sa&#287;l&#305;k.Fakat &#231;ok olmazsam e&#287;er bir sorum daha olacak.Ara b&#246;l&#252;m&#252;ndeki texboxta yazd&#305;&#287;&#305;m veri arand&#305;ktan sonra bu textboxu ba&#351;ka arama i&#231;in silmeye &#231;al&#305;&#351;t&#305;&#287;&#305;mda listviewe veriler ge&#231; geliyor.( yani textboxu bo&#351;altt&#305;ktan sonra herhalde change olay&#305; ile ilgili ).Anlatabildim in&#351;allah.
 
Textboxtaki kodlar&#305;n en &#252;st&#252;ne a&#351;a&#287;&#305;daki sat&#305;rlar&#305; ilave edebilirsiniz ancak buda &#231;ok h&#305;zl&#305; olmayacakt&#305;r. Listview nesnesine veriler d&#246;ng&#252; ile y&#252;klendi&#287;i i&#231;in &#246;zellikle veri say&#305;s&#305; fazla oldu&#287;unda biraz yava&#351; &#231;al&#305;&#351;maktad&#305;r. (ba&#351;ka veri y&#252;kleme y&#246;ntemi varm&#305; bilmiyorum) Bu nesne yerine g&#246;rsellikten fedakarl&#305;k ederek listbox kullanabilirsiniz.

Kod:
If TextBox7 = "" Then
UserForm_Initialize
Exit Sub
End If
 
sn leventm bey verdi&#287;iniz bilgiler i&#231;in &#231;ok te&#351;ekk&#252;r ederim.Birde dosyay&#305; biraz daha d&#252;zenleyip daha h&#305;zl&#305; olan ba&#351;ka bir bilgisayarda denedikten sonra sonu&#231;lar&#305; payla&#351;&#305;r&#305;m.Asl&#305;nda listbox konusunda &#231;ok hakl&#305;s&#305;n&#305;z herhalde gidi&#351;at oraya do&#287;ru ! &#304;yi &#231;al&#305;&#351;malar.
 
sn leventm bey b&#252;romdaki bilgisayarda ( i&#351;lem&#231;i &#231;ift &#231;ekirdek 2.8) arama kodlar&#305; yakla&#351;&#305;k 5000 sat&#305;ra kadar az etkilenerek sorunsuz &#231;al&#305;&#351;t&#305;.(Di&#287;er bilgisayar P2) .Tekrar yard&#305;mlar&#305;n&#305;z i&#231;in &#231;ok te&#351;ekk&#252;r ederim.&#304;yi &#231;al&#305;&#351;malar.
 
Geri
Üst