belirli bir dizindeki dosyalar indeksleme ve köprü oluşturma

Katılım
17 Şubat 2006
Mesajlar
117
merhaba,

ornegin c:\datasheet diye bir directory oldugunu varsayalim. ve bu dizinin icinde 500 adet dosya.
bir makro ile bu dosyalarin isimlerini excel e tasiyarak dosyalarin herbirine link (kopru) olusturabilirmiyiz?

ornegin a1 de "deneme.doc" yazacak ve üstüne tıklandığında o dosya açılacak.

tesekkurler.
 

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
Aşağıdaki kodu deneyin.

[vb:1:1c6bfb45ed]Sub linkver()
Set yol = CreateObject("Scripting.FileSystemObject").GetFolder("c:\datasheet").Files
For Each dosya In yol
c = c + 1
ActiveSheet.Hyperlinks.Add Anchor:=Cells(c, "a"), Address:="c:\datasheet\" & dosya.Name, TextToDisplay:=dosya.Name
Next
End Sub
[/vb:1:1c6bfb45ed]
 
Katılım
17 Şubat 2006
Mesajlar
117
Merhaba Leventm,
Tebrik ederim, müthiş calisiyor!!!
:bravo:
ancak iki kucuk sorum daha var:
1. indekslemeye altdizinleri nasil dahil edebiliriz?
2.birde her linke bastigimda guvenlik uyarisi cikiyor:"kopruler zarar verebilir" seklinde, nasil engelleyebiliriz.

Cok tesekkur ederim.

iyi aksamlar... :hey:
 

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
1-Alt klasörleri ilave edersek kod biraz karmaşık hale gelecektir. Alt klasör sayısı ve isimleri nelerdir.

2-Bu uyarı sanıyorum, kodu kayıtlı olmayan bir dosyada denediğinizden ortaya çıkıyor, dosyayı kaydederseniz çıkmaması gerekir.
 
Katılım
17 Şubat 2006
Mesajlar
117
1.alt klasörler
2002, 2003, ... , 2006 ve her kalsorun altinda yine cok sayida veri var.
bunlari ayri sutunlara indeksleme yapabilirmiyiz? a sutununa 2002, b ye 2003 şeklinde.


2. evet haklisiniz. artik uyari vermiyor.

yardiminiz icin tesekkur ederim. :hey:
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
Levent Beyin Kodlarını aşağıdaki şekilde değiştirseniz, alt klasörleri de alır
[vb:1:180bde3127]Sub linkver()
Set fc = CreateObject("Scripting.FileSystemObject")
Set yol = fc.GetFolder("c:\datasheet").Files

For Each dosya In yol
c = c + 1
ActiveSheet.Hyperlinks.Add Anchor:=Cells(c, "a"), Address:="c:\datasheet" & dosya.Name, TextToDisplay:=dosya.Name
Next

Set f_yollar = fc.GetFolder("c:\datasheet").subfolders

For Each f_path In f_yollar
For Each dosya In f_path.Files
c = c + 1
ActiveSheet.Hyperlinks.Add Anchor:=Cells(c, "a"), Address:="c:\datasheet\" & dosya.Name, TextToDisplay:=dosya.Name
Next
Next

End Sub[/vb:1:180bde3127]
 
Katılım
17 Şubat 2006
Mesajlar
117
sayin veyselemre,

bu sefer 2 adet problemim var:

1. sadece 1. düzey alt kalsörleri listeliyor. yani c:\datasheets\2002\1\ dizinini almiyor. sadece c:\datasheets\2002 klasörü altindakileri aliyor.

2. hyperlinklerin hic biri çalışmıyor.
sadece c:\datasheets altindakilerin linki calisiyor. diger altdizindeki dosyalarida c:\datasheets in altinda ariyor. halbuki bir alt dizinde aramali. bu yuzden dosya acilamiyor uyarisi veriyor.

cevaplarinizi bekliyorum, cok tesekkurler. :hey:
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
2. sorunuz için alttaki kısmı
ActiveSheet.Hyperlinks.Add Anchor:=Cells(c, "a"), Address:=f_path & "\" & dosya.Name, TextToDisplay:=f_path & "\" & dosya.Name
kodu bu şekilde değiştirin

1. sorunuz için ise alt klasör kırılım sayısı belli ise çözüm üretilebilir.
 
Katılım
17 Şubat 2006
Mesajlar
117
ornegin 5 seviye altdizin dersek:
c:\datasheets\2002\1\a\akrilik\

herhalde tum altdizinleri otomatik olarak macro ile excel alamiyor?

iyi gunler.
 

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
herhalde tum altdizinleri otomatik olarak macro ile excel alamiyor?
Bunun için çok sayıda döngü kullanılarak bir kod yazılabilir elbette. Ama bu işlem süresini çok uzatacaktır.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,642
Excel Vers. ve Dili
Pro Plus 2021
Aşağıdaki kodları bir deneyerek, sonucu bildirirseniz sevinirim.
Edit:Kodlar revize edildi.
[vb:1:9be135a02a]Sub linkver()
Range("a:a").ClearContents
Dim col As New Collection
On Error Resume Next
Set fso = CreateObject("Scripting.FileSystemObject")

col.Add "c:\vemre"
bas = 1: son = 1

tara:
For x = bas To son
yol = col(x)
GoSub alt_dizinleri_bul
Next

If col.Count > son Then
bas = son + 1
son = col.Count
GoTo tara
Else
GoTo dosyalar
End If


alt_dizinleri_bul:
Set fp = fso.GetFolder(yol).subfolders
If Not fp Is Nothing Then
For Each S In fp
col.Add S.Path, S.Path
Next S
End If
Return

dosyalar:
For Each fdir In col
Set Sub_Dir = fso.GetFolder(fdir).Files
For Each dosya In Sub_Dir
t = t + 1
ActiveSheet.Hyperlinks.Add Anchor:=Cells(t, 1), Address:=dosya.Path, TextToDisplay:=dosya.Path
Next dosya
Next fdir

Set Sub_Dir = Nothing
Set fp = Nothing
Set fso = Nothing
End Sub
[/vb:1:9be135a02a]
 
Katılım
17 Şubat 2006
Mesajlar
117
veyselemre, muthis olmus eline saglik.

tebrikler... :eek:k::

digerlerine bilgi olmasi acisindan bunu stabil bir klasor yerine kullaniciya klasor sectirme seklindeyapabiliriz saniyorum. boyle bisey leventm baska bir ornekte yapmisti diye hatirliyorum. onuda yazarsak bu problem son halini almis olur.

Selamlar. :hey:
 
Üst