Userform PDF Listeleme'de Textbox ile Arama

mrtank50

Altın Üye
Katılım
10 Haziran 2018
Mesajlar
25
Excel Vers. ve Dili
Excel 2021 LTSC Professional Plus 64 bit
Altın Üyelik Bitiş Tarihi
10-03-2027
Sevgili arkadaşlar herkese hayırlı akşamlar dilerim.

Elimde bir userform mevcut.

Dosya yol'undaki pdf dosyalarını listbox'ta sıralayıp webbrowser'da gösteriyor.

Ben bir kaç özellik düşündüm mümkünatı var mı bilmiyorum.

1-Listbox'taki isimleri harf sırasına göre sıralaması çünkü dosya yolunu gösteriyor. Örnek C:\Users\hasan\Desktop\yazılar gibi

2-Listele butonuna alternatif olarak , Userform'da bir textbox ile aradığım pdf'ye yakını bulsun. Örnek olarak A harfine bastığımda A harfi ile başlayanlar listelensin.Çünkü 200 civarında pdf var ve her geçen gün artıyor.

3-Webbrowserdaki pdf'yi yazdıracak bir buton ekleyemedim.

4-Multipage ile page1 sadece pdfleri listelesin. Page2 sadece jpgleri listelesin gibi bir durum söz konusu mu acaba ?


Arkadaşlar aranıza katılalı çok fazla olmadı.
Yaklaşık 4-5 saattir araştırıyorum arkadaşlar en son çare foruma konu açıyorum. 60-70 tane örnek dosya indirdim ama aradığımı bulamadım.

Malasef yapamadım sizden değerli yardımlarınızı bekliyorum.

Userform1 çalışan form arkadaşlar.
Userform2 4.madde belirttiğim mantık.
 

Ekli dosyalar

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
4. Soru için aşağıdaki kodları deneyin.
Kod:
Private Sub CommandButton1_Click()
ListBox1.Clear
Call ListeAl(ListBox1, TextBox1.Text, "*.pdf", CheckBox1.Value)
End Sub


Sub ListeAl(Lst, Klasor$, DTipi$, Alt%)
Dim klasorler(), i, dosya$, yol$, attr%, ks%
Static r
' Kalıcı değişken tanımlandı.
' Recursive (kendini çağırma) yapıldığında r sıfırlanmasın diye
On Error Resume Next 'Hata olursa aldırma sonrakinden devam et !!!
If Right$(Klasor, 1) <> "\" Then Klasor = Klasor & "\"
' Klasörü tanımlayan kişi sonuna \ koumamış olabilir.
' Bir zahmet onu da bilgisayar koysun demek :)
If DTipi = "" Then DTipi = "*.*"
' Dosya türü belirsiz ise boş yere çalışma. Grev yap :)
dosya = Dir(Klasor & DTipi, vbNormal)
' ilk dosyamızı alalım
Do While dosya <> ""    ' dosya değişkeni boş olmadığı sürece
                        ' sen dönmeye devam et
        yol = Klasor & dosya
        ' dosyanın yolu ve adı
        Lst.AddItem yol
        ' Aktif hücreden r kadar aşağı yol ve adı yazıver
        r = r + 1
        ' biraz sonra yazacak olursan, aktif hücreden
        ' kaç satır aşağı yazacağını şimdiden söyledim
        dosya = Dir()
        ' sonraki dosyayı al
Loop
If Alt = False Then
    Exit Sub
End If
' Alt dizinlere bakma dedilerse
' bundan sonrakileri çalıştırmak gereksiz
dosya = Dir(Klasor & "*.*", vbDirectory)
' klasörü al
Do While dosya <> ""
    attr = 0
    attr = GetAttr(Klasor & dosya)
    ' klasörün niteliği
    If dosya <> "." And dosya <> ".." And _
        (attr And vbDirectory) <> 0 _
    Then ' klasörün niteliği . veya .. veya klasör değilse
        ks = ks + 1 'kaç klasör oldu ?
        ReDim Preserve klasorler(1 To ks)
        ' klasörler değişkeninin boyutunu genişlet
        klasorler(ks) = dosya
        ' eğer aldığımız gerçek bir klasörse değişkene aktar
    End If
    dosya = Dir()
    'sonrakine bak
Loop
For i = 1 To ks 'bulunan klasör sayısı kadar dön
     Call ListeAl(Lst, Klasor & klasorler(i) & "\", DTipi, Alt)
     ' Bir de o klasörlere dal içinde ne var ne yok, incele
Next i
End Sub

Private Sub ListBox1_Click()
WebBrowser1.Navigate ListBox1
End Sub

Private Sub ListBox2_Click()
WebBrowser2.Navigate ListBox2
End Sub

Private Sub TextBox2_Change()
Dim i As Long
Dim arrlist As Variant
Dim sonsat As Integer

ListBox1.Clear
Call ListeAl(TextBox1.Text, "*.pdf", CheckBox1.Value)

            Exit Sub
End Sub

Private Sub CommandButton2_Click()
ListBox2.Clear
Call ListeAl(ListBox2, TextBox3.Text, "*.jpg", CheckBox2.Value)
End Sub
 

mrtank50

Altın Üye
Katılım
10 Haziran 2018
Mesajlar
25
Excel Vers. ve Dili
Excel 2021 LTSC Professional Plus 64 bit
Altın Üyelik Bitiş Tarihi
10-03-2027
4. Soru için aşağıdaki kodları deneyin.
Kod:
Private Sub CommandButton1_Click()
ListBox1.Clear
Call ListeAl(ListBox1, TextBox1.Text, "*.pdf", CheckBox1.Value)
End Sub


Sub ListeAl(Lst, Klasor$, DTipi$, Alt%)
Dim klasorler(), i, dosya$, yol$, attr%, ks%
Static r
' Kalıcı değişken tanımlandı.
' Recursive (kendini çağırma) yapıldığında r sıfırlanmasın diye
On Error Resume Next 'Hata olursa aldırma sonrakinden devam et !!!
If Right$(Klasor, 1) <> "\" Then Klasor = Klasor & "\"
' Klasörü tanımlayan kişi sonuna \ koumamış olabilir.
' Bir zahmet onu da bilgisayar koysun demek :)
If DTipi = "" Then DTipi = "*.*"
' Dosya türü belirsiz ise boş yere çalışma. Grev yap :)
dosya = Dir(Klasor & DTipi, vbNormal)
' ilk dosyamızı alalım
Do While dosya <> ""    ' dosya değişkeni boş olmadığı sürece
                        ' sen dönmeye devam et
        yol = Klasor & dosya
        ' dosyanın yolu ve adı
        Lst.AddItem yol
        ' Aktif hücreden r kadar aşağı yol ve adı yazıver
        r = r + 1
        ' biraz sonra yazacak olursan, aktif hücreden
        ' kaç satır aşağı yazacağını şimdiden söyledim
        dosya = Dir()
        ' sonraki dosyayı al
Loop
If Alt = False Then
    Exit Sub
End If
' Alt dizinlere bakma dedilerse
' bundan sonrakileri çalıştırmak gereksiz
dosya = Dir(Klasor & "*.*", vbDirectory)
' klasörü al
Do While dosya <> ""
    attr = 0
    attr = GetAttr(Klasor & dosya)
    ' klasörün niteliği
    If dosya <> "." And dosya <> ".." And _
        (attr And vbDirectory) <> 0 _
    Then ' klasörün niteliği . veya .. veya klasör değilse
        ks = ks + 1 'kaç klasör oldu ?
        ReDim Preserve klasorler(1 To ks)
        ' klasörler değişkeninin boyutunu genişlet
        klasorler(ks) = dosya
        ' eğer aldığımız gerçek bir klasörse değişkene aktar
    End If
    dosya = Dir()
    'sonrakine bak
Loop
For i = 1 To ks 'bulunan klasör sayısı kadar dön
     Call ListeAl(Lst, Klasor & klasorler(i) & "\", DTipi, Alt)
     ' Bir de o klasörlere dal içinde ne var ne yok, incele
Next i
End Sub

Private Sub ListBox1_Click()
WebBrowser1.Navigate ListBox1
End Sub

Private Sub ListBox2_Click()
WebBrowser2.Navigate ListBox2
End Sub

Private Sub TextBox2_Change()
Dim i As Long
Dim arrlist As Variant
Dim sonsat As Integer

ListBox1.Clear
Call ListeAl(TextBox1.Text, "*.pdf", CheckBox1.Value)

            Exit Sub
End Sub

Private Sub CommandButton2_Click()
ListBox2.Clear
Call ListeAl(ListBox2, TextBox3.Text, "*.jpg", CheckBox2.Value)
End Sub


Hocam değerli cevabın için çok teşekkür ederim. Kod'u denedim ve işe yaradı . Lakin pdf'den jpg'e geçişlerde debug hatası olarak bunu verdi.
 

Ekli dosyalar

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@askm ;

Kodunu çalıştırmadım, denemedim .... ne işe yarıyor, ne yapıyor, bilmiyorum..... ama okurken comment'ler(-açıklamalar) çok hoşuma gitti.....

Kod yazmak işte budur, yazarken eğleneceksin ..... hem de kodu çalıştırana yol göstereceksin.

Not: Yine de benden tavsiye..... "On Error Resume Next" komutunu kullanma, üşenmeyip hatanın nereden kaynaklandığını bul ve önlemini al.


.
 
Son düzenleme:
Üst