• DİKKAT

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

xlDialogBrowse problemi?(Klasöre Gözat penceresi)

Katılım
13 Haziran 2006
Mesajlar
374
Excel Vers. ve Dili
Excel 2003 Türkçe
Matematik Öğretmeni VB,Excel-VBA,...
Arkadaşlar;
Aşağıdaki kodla Dosya açma penceresini çağırıyoruz.
Kod:
Application.Dialogs(xlDialogOpen).Show
Fakat benim istediğim Klasöre Gözat penceresini çağırmak.Kodu bu şekilde düzenlediğimde hata veriyor.
Kod:
Application.Dialogs(xlDialogBrowse).Show
Amacım klasör seçip içindekilerin tümünü listboxa atmak.
xlDialogOpen ile klasör içindeki dosyayı açıyor ve ordan tek tek dosya seçiyoruz.Oysa yapmak istediğim şey klasörü seçince içindekilerin tümünü listeletmek.İşte bunu xlDialogBrowse ile yapamaya çalışıyorum olmuyor.VB6 da
Kod:
BrowseForFolder(Me.hwnd, "Klasör Seçiniz...")
kodları ile bu pencereye ulaşabiliyorum.

as.bmp


Excelde bunun yolu var mı,nedir?
 
Merhaba

İnternette bulduğum kodlara uyarlama yaptım .belki işinize yarayabilir.
Daha önce Sn.Haluk'un çok daha güzel çalışmaları vardı fakat bulamadım.

inceleyiniz.

Private Sub CommandButton1_Click()
Dim yol, dizin
Set yol = CreateObject("Shell.Application")
Set dizin = yol.BrowseForFolder(&O0, "????????????", &H1 + &H10)
dosya = Dir(dizin.Items.Item.Path & Application.PathSeparator & _
"*.xls", vbDirectory)
Do While dosya <> ""
If dosya = ThisWorkbook.Name Then GoTo ResumeSub:
i = i + 1
ListBox1.AddItem dosya
ResumeSub:
dosya = Dir
Loop
Set yol = Nothing
Set dizin = Nothing

End Sub
 
Son düzenleme:
Merhaba

2.seçenek

Private Sub CommandButton2_Click()
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
dizin = .SelectedItems(1)
End If
End With

dosya = Dir(dizin & Application.PathSeparator & _
"*.xls", vbDirectory)
Do While dosya <> ""
If dosya = ThisWorkbook.Name Then GoTo ResumeSub:
i = i + 1
ListBox1.AddItem dosya
ResumeSub:
dosya = Dir
Loop
End Sub
 
Merhaba

Leventm çok güzel bir çalışma yapmışsınız görmemişim.
özür dilerim....
 
Merhaba

Leventm &#231;ok g&#252;zel bir &#231;al&#305;&#351;ma yapm&#305;&#351;s&#305;n&#305;z g&#246;rmemi&#351;im.
&#246;z&#252;r dilerim....


Rica ederim de&#287;erli dostum Zafer bey, Excel i&#231;in &#214;rnek uygulamalar ve linkler ba&#351;l&#305;&#287;&#305;n&#305; bu sebeple gruplara ay&#305;rmay&#305; d&#252;&#351;&#252;nm&#252;&#351;t&#252;k. B&#246;ylece g&#252;zel olan bir &#231;ok &#231;al&#305;&#351;may&#305; tekrar ortaya &#231;&#305;kartm&#305;&#351; olaca&#287;&#305;z.
 
Kod:
BrowseForFolder(0, "L&#252;tfen bir klas&#246;r se&#231;in !", &H100)
Merhaba,
Buradaki 0 ve &H100 parametreleri neyi ifade ediyor?
Bu de&#287;erler sabit midir? Yoksa di&#287;er alabilece&#287;i de&#287;erler nedir?
 
bende bir soru sormak istiyorum.

sn arkadaşlar
bu sayfadan çok şey öğrendim. hepinizin emeğine sağlık.

klasör açmak için kullanılan kodları gördüm. peki herhangi bir dosyanın seçilmesi için hangi kodları kullanabiliriz?
Application.Dialogs(xlDialogOpen).Show bu kod excel aç komutu. ben herhangi bir dosyayı seçip çalıştırmak istiyorum.(klasöre gözat değilde dosyaya gözat nasıl olur?)

teşekkürler iyi çalışmalar
saygılar:???:
 
Aman&#305;nnnn Levent Bey;
Kodlar s&#252;per hemde k&#305;sac&#305;k,elinize sa&#287;l&#305;k.Ayr&#305;ca verdi&#287;iniz &#246;rne&#287;i &#231;oktan ar&#351;ivime eklemi&#351;tim,fakat g&#246;z atmay&#305; unutmu&#351;um.Daha do&#287;rusu farkl&#305; bir &#351;ekilde klas&#246;r se&#231;ti&#287;ini hat&#305;rlad&#305;&#287;&#305;m i&#231;in bakmam&#305;&#351;t&#305;m.Siz s&#246;yleyince hat&#305;rlad&#305;m.
Te&#351;ekk&#252;r ederim.
 
Buradaki 0 ve &H100 parametreleri neyi ifade ediyor?
Bu de&#287;erler sabit midir? Yoksa di&#287;er alabilece&#287;i de&#287;erler nedir?

Bu konuda bildiklerimi s&#246;yleyeyim, ba&#351;taki s&#305;f&#305;r nedir bilmiyorum, sondaki &H100 decimal 256 say&#305;s&#305;n&#305;n hexadecimal kar&#351;&#305;l&#305;&#287;&#305;d&#305;r, bunun yerine 256 da yazabilirsiniz, browserin g&#246;r&#252;nt&#252;s&#252; ve i&#351;levi ile ilgili bir parametredir. &#214;rne&#287;in bu de&#287;er yerine 16 veya &H10 yaz&#305;n, yada 1 veya &H1 yazarak g&#246;r&#252;n&#252;mdeki de&#287;i&#351;iklikleri inceleyin. Hatta kodu a&#351;a&#287;&#305;daki gibi d&#252;zenlerseniz klas&#246;r&#252;de se&#231;ebilirsiniz.

Kod:
[LEFT]Set klasor = CreateObject("Shell.Application").BrowseForFolder(0, "L&#252;tfen bir klas&#246;r se&#231;in !", &H100[B][COLOR=blue], "C:\")[/COLOR][/B]
msgbox klasor.Items.Item.Path[/LEFT]
 
Verdi&#287;iniz bilgiler i&#231;in te&#351;ekk&#252;rler Levent bey.
 
klasör açmak için kullanılan kodları gördüm. peki herhangi bir dosyanın seçilmesi için hangi kodları kullanabiliriz?

Aşağıdaki kodu kullanabilirsiniz.

Kod:
dosya = Application.GetOpenFilename("Excel Dosyası (*.xls),*.xls", , "........ Dosyasını Seçin")
MsgBox dosya
 
Sözkonusu uygulamayı çağıran pencerenin "handle" numarasıdır.

Teşekkür ederim Haluk Hocam. Bununla ilgili bir kaç soru sormak istiyorum. Bildiğim kadarı ile bu handle nosu genellikle APIlerde nesneye farklı özellikler eklerken kullanılıyor, bu doğrumudur? Bunun dışında başka bir kullanım yeri mevcutmudur? Birde nesnelerin handle nosunu bulan bir kodlama (hazır bir listede olabilir) varmıdır.
 
Bilgiler i&#231;in te&#351;ekk&#252;rler.
Ancak &#304;PTAL tu&#351;una bast&#305;&#287;&#305;m&#305;zda "object variable or with block variable not set" hatas&#305; veriyor.
Bundan kurtulman&#305;n tek yolu "On Error Resume Next" sat&#305;r&#305;n&#305; eklemek mi ba&#351;ka bir &#231;&#246;z&#252;m&#252; varm&#305;.
 
Bilgiler için teşekkürler.
Ancak İPTAL tuşuna bastığımızda "object variable or with block variable not set" hatası veriyor.
Bundan kurtulmanın tek yolu "On Error Resume Next" satırını eklemek mi başka bir çözümü varmı.

Aşağıdaki gibi deneyin.

Kod:
Set klasor = CreateObject("Shell.Application").BrowseForFolder(0, "Lütfen bir klasör seçin !", &H100, "C:\")
If Not klasor Is Nothing Then MsgBox klasor.Items.Item.Path
 
Levent dostum,

Windows i&#351;letim sistemi ad&#305;ndan da anla&#351;&#305;laca&#287;&#305; &#252;zere "pencereler" mant&#305;&#287;&#305;yla &#231;al&#305;&#351;an bir sistemdir.

Her program veya her program&#305;n &#231;a&#287;&#305;rd&#305;&#287;&#305; bir diyalog kutusu veya form asl&#305;nda bir penceredir ve her pencerenin bir "handle numaras&#305;" vard&#305;r.

VB (Visual Basic) ile VBA (Visual basic for Applications) aras&#305;ndaki temel fark, her iki dilde de kullan&#305;lan ve benzer &#246;zelliklerini g&#246;zlemledi&#287;imiz nesnelerdedir. &#199;&#252;nk&#252;, VB'de nesneler de bir yerde penceredir ama VBA'de durum b&#246;yle de&#287;ildir. Yani, VB'de bir ListBox'&#305;n "handle numaras&#305;" vard&#305;r ve buna ula&#351;&#305;p, kullanarak baz&#305; i&#351;ler yapabiliriz ama VBA'deki ListBox bir pencere olmad&#305;&#287;&#305; i&#231;in herhangibir "handle numaras&#305;" yoktur.

"Handle numaras&#305;" asl&#305;nda "Windows - Pencereler" i&#351;letim sisteminin, uygulama s&#305;ras&#305;nda aktif pencereler aras&#305;nda hangi pencere ile ilgilendi&#287;ini bulabilmesi i&#231;in kullan&#305;lan bir &#246;zelli&#287;idir. Nesnelerin standart "handle numaralar&#305;" yoktur. Uygulaman&#305;n "compile-derlenme" ve "runtime - &#231;al&#305;&#351;t&#305;rma" a&#351;amalar&#305;nda, Windows pencere &#246;zelli&#287;i olanlara bir numara atamas&#305; yapar.

Yani, bu "handle numaras&#305;" olmadan, Windows pencerelere h&#252;kmedemez. Bu "handle numaras&#305;" formlar&#305;n, uygulamalar&#305;n, nesnelerin "KimlikNumaras&#305;" gibi oldu&#287;unu d&#252;&#351;&#252;nebiliriz.

VB'de bir formun "handle numaras&#305;" formun &#246;zelliklerine g&#246;m&#252;lm&#252;&#351;t&#252;r, benzer &#351;ekilde nesnelerin de &#246;yle (e&#287;er varsa), ama VBA'de durum b&#246;yle de&#287;il. Bu nedenle, VBA'de pencere &#246;zelli&#287;i olan nesnelerin bu "handle numaras&#305;n&#305;" API'ler ile bulabiliyoruz. (Neyseki MS buna izin veriyor.)
 
&#220;stad&#305;m &#231;ok te&#351;ekk&#252;r ediyorum, &#231;ok yararl&#305; bir bilgi oldu benim i&#231;in.
 
Geri
Üst