Tüm Alt klasörleri listelemek

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba;

Aşağıdaki kodla Belirlenen Bir klasörün "C:\" direkt altındaki klasör adlarını listeleyebiliyorum.
Listelenen bu klasörlerin tüm alt klasörlerinin içerisinde bulunan klasör adlarının da listelenmesini sağlayabilirmiyiz.

"C:\1111"
"C:\1111\22222"
"C:\1111\44444"
"C:\1111\22222\33333"
gibi....

özetle seçilen klasörün altında (alt alta) ne kadar klasör varsa bunların hepsini görmek istiyorum.


Sub alt_klasor()
Dim FSO As Object
Dim AllSubFolders, MySubFolder, MyFolder
Dim MyFold As String

Set ObjFolder = CreateObject("Shell.Application").BrowseForFolder(0, "Lütfen bir klasor seçin !", &H100)

MyPath = ObjFolder.Items.Item.Path
j = 1

Set FSO = CreateObject("Scripting.FileSystemObject")
Set MyFolder = FSO.GetFolder(MyPath)
Set AllSubFolders = MyFolder.SubFolders

For Each MySubFolder In AllSubFolders
MyFold = MySubFolder.Name
Cells(j, 6).Value = MyFold
j = j + 1

Next

End Sub
Tüm arkadaşlara başarılar dilerim...
 

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
Kod:
Sub Test()
    Set ObjFolder = CreateObject("Shell.Application").BrowseForFolder _
                    (0, "Lütfen bir klasor seçin !", &H100)
    MyPath = ObjFolder.Items.Item.Path
    Call FolderList(MyPath)
End Sub
'
Sub FolderList(MyPath)
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(MyPath)
    Set sf = f.SubFolders
    On Error Resume Next
    For Each f1 In sf
        i = i + 1
        Cells(i, 1) = f1.Path
        Call FolderList(f1.Path)
    Next
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Sn Haluk,
Emeğiniz için teşekkürler...

Yalnız listelediğimde bazı klasörler gelmiyor.

Gelmeyenleri bir türlü çözemedim.

İyi Çalışmalar.
 

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
Merhaba,

Bahsettiğiniz klasörler gizli, salt-okunur .... falan gibi mi acaba ?
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Görünürde bunlardan hiç biri değil.

Ayrıca burada çıkmayan dosyalar yukarıda benim verdiğim kodlarda çıkıyor.

Sub alt_klasor()
.....
......
End Sub
 

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
Bir de aşağıdakini deneyin;

Kod:
Public j
'
Sub Test()
    Set ObjFolder = CreateObject("Shell.Application").BrowseForFolder _
                    (0, "Lütfen bir klasor seçin !", &H100)
    MyPath = ObjFolder.Items.Item.Path
    ListFolders (MyPath)
End Sub
'
Sub ListFolders(MyPath)
    Dim FSO As Object, MyFolder As Object
    Dim AllSubFolders As Object, MySubFolder As Object
    Dim MyFold As String
    On Error Resume Next
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set MyFolder = FSO.GetFolder(MyPath)
    Set AllSubFolders = MyFolder.SubFolders
    For Each MySubFolder In AllSubFolders
        j = j + 1
        MyFold = MySubFolder.Path
        Cells(j, 1) = MyFold
        ListFolders (MySubFolder.Path)
    Next
End Sub
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Sn Haluk,
Tespit edebildiğim kadarıyla;

Verdiğiniz her iki kodda da:

i = i + 1
Cells(i, 1) = f1.Path
Call FolderList(f1.Path)
bu aralıkta Call FolderList(f1.Path)

her çağırdığında i değerini 1 olarak kabul ediyor ve üstüne yazıyor.

Ben aşağıdaki gibi bir değişiklik yaptım sorun kalmadı, bilemiyorum yaptığım bu değişikliğin daha pratik bir yolu varmıdır. Yani ("C1") hücresine birşey yazdırmadan.

Sub altklasor()
Set ObjFolder = CreateObject("Shell.Application").BrowseForFolder _
(0, "Lütfen bir klasor seçin !", &H100)
MyPath = ObjFolder.Items.Item.Path
Call FolderList(MyPath)
End Sub
'
Sub FolderList(MyPath)
Dim i As Integer
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(MyPath)
Set sf = f.SubFolders

For Each f1 In sf
i = Range("C1").Value
i = i + 1
Cells(i, 1) = f1.Path
Range("C1").Value = i
Call FolderList(f1.Path)
Next

End Sub
İlgi ve emeğiniz için tekrar teşekkür ederim.
 

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
tamer42' Alıntı:
Yani ("C1") hücresine birşey yazdırmadan.
Yukarıda en son önerdiğimi denediniz mi ?

Oradaki "Public j " kısmı önemli.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Tamam dır,

Oradaki "Public j " kısmı önemli.
Sn Haluk bu bölümü göndermeden önce denemiştim,

Ã?ğrenmek açısından; Public kullanımıyla ilgili kısa bir bilgi verebilirseniz sevinirim.
Nerede ve ne amaçla kullanılır?

İlginiz için, İçten Teşekkür ederim.
 

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
Bu kodda, "j" değişkeninin alacağı en son değerini kaybetmemesi için modül seviyesinde deklare etmek gerekiyordu.

"Public" ile modül seviyesinde deklare edilen değişkenler tüm modüllerde bütün prosedürlerde geçerli olur, "Dim" ile deklare edilenler sadece, içinde bulundukları modüldeki tüm prosedürlerde geçerli olur.

"Dim" ile prosedür seviyesinde deklare edilen değişkenler sadece, deklare edildikleri prosedürde geçerli olurlar ve prosedür bittiğinde değişkenler sıfırlanır.

Bu nedenle, modül seviyesinde deklare edilen değikenler (deklare edilldikleri değişken tipine bağlı olarak) hafızada daha fazla yer kaplarlar.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Elinize sağlık,

Sizi bugün epey yorduk.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Merhabalar;

"Public" ile modül seviyesinde deklare edilen değişkenler tüm modüllerde bütün prosedürlerde geçerli olur, "Dim" ile deklare edilenler sadece, içinde bulundukları modüldeki tüm prosedürlerde geçerli olur.
Aynı eklenti içerisinde;
Bir userform ortamında deklare ettiğimiz değikenlerin tüm modüllerdeki bütün prosedürlerde geçerli olması sağlanabilirmi?

Şimdiden teşekkür eder, İyi Çalışmalar dilerim
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Bir değişkeni userformun kod sayfasında en üstte public olarak tanımlarsanız, normal bir modülde userformun isminide kullanarak çağırabilirsiniz. Örneğin;

public deg as integer (userform kod sayfasında tanımlı)


userform1.deg (normal modül sayfasında kullanım şekli)
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Sn Levent ilginize teşekkürler,


Bu şekilde; Userform unload edilmeden kodları çağırmak gerekiyor.

Unload edildikten sonra değer kayboluyor.

Userform Unload edildikten sonra kodlar çağrıldığında değerin kaybolmaması için nasıl bir düzenleme gerekir.


.....
Call FileList
Unload Me

End Sub
Şeklinde değer korunuyor.
.....
Unload Me
Call FileList

End Sub
Şeklinde değer korunmuyor.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Bunun en pratik çözümü değeri bir hücreye yazdırıp, tekrar hücreden okumaktır.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Sn Levent,

Userform' u minimize etsemde olur, amaç kodlar çalışırken ekranda görünmesin.

fakat Userform.Minimize diye bir seçenek bulumadım,

Bunun bir yöntemi vamıdır?

Teşekkürler, Kolay gelsin.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Minimize edecek kodlar forumda mevcut ama bundan daha kolayı olarak userformu aşağıdaki kod ile saklayabilirsiniz.

userform1.hide
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,043
Excel Vers. ve Dili
Office 2013 İngilizce
Teşekkürler,
İstediğim zaten tam buydu.
 
Üst