• DİKKAT

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

bir klasörün içinde "abc" ile başlayan jpg uzantılı dosyaların sayıs

Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Esenlikler
excel vba ile bir klasörün içinde "abc" ile başlayan jpg uzantılı dosyaların sayısını nasıl tespit edebiliriz?

klsr =c:\resim
bas = "abc"
son = ".jpg"
Ara = ???
adt = Ara.????
 
Kod:
Sub Test()
    MyPath = "C:\Resim"
    MyFile = Dir(MyPath & "\*.jpg", vbDirectory)
    Do While MyFile <> ""
        If MyFile Like "abc*" Then
            adt = adt + 1
        End If
        MyFile = Dir
    Loop
    MsgBox "Bulunan dosya sayısı : " & adt & " adet"
End Sub
 
te&#351;ekk&#252;r ederim hocam eme&#287;inize sa&#287;l&#305;k
 
hocam ancak bir sorun var
ben çalıştırdığımda If MyFile Like "[vtmahbirimler.xls-ilveilce]_[E8_H21]*" Then
satırında invalid pattern string hatası veriyor... ne yapabilirz?

Kod:
Sub TestKlsSay()
Dim MyPath, MyFile As String
Dim araIsm
Dim adt As Integer
    MyPath = "C:\Resim"
    araIsm = "[vtmahbirimler.xls-ilveilce]_[E8_H21]*"
    MyFile = Dir(MyPath & "\*.jpg", vbDirectory)
    Do While MyFile <> ""
        If MyFile Like "[vtmahbirimler.xls-ilveilce]_[E8_H21]*" Then
'        If MyFile Like araIsm Then
            adt = adt + 1
        End If
        MyFile = Dir
    Loop
    MsgBox "Bulunan dosya sayısı : " & adt & " adet"
End Sub

resimekmodlyardmnj0.jpg
 
Kod:
If MyFile Like "[vtmahbirimler.xls-ilveilce]_[E8_H21]*" Then


bu satırı silin
 
Haluk Bey'&#238;n kodunda &#351;&#246;yle bir de&#287;i&#351;iklik yapmam&#305;zda bir mahsur yoktur umar&#305;m.
Kod:
Sub Test()
    MyPath = "C:\Resim"
    myfile = Dir(MyPath & "\*.jpg", vbDirectory)
    Do While myfile <> ""
[b][u]' ifadenizde ilk 3 harften bahsediyorsan&#305;z e&#287;er ,a&#351;ag&#305;daki kod'uda kullanabilirsiniz[/b][/u] 
       If Left(myfile, 3) = "abc" Then
            adt = adt + 1
isim = MyFile & vbCrLf & isim
        End If
        myfile = Dir
    Loop
    MsgBox "Bulunan dosya say&#305;s&#305; : " & adt & " adet"
MsgBox "Bulunan dosya isimler: " & vbCrLf & isim & vbCrLf
End Sub

Haluk Hocam&#305;z&#305;n izni ile;
 
Son düzenleme:
Sn Rakkas kodlar&#305; hen&#252;z denemedim ancak ilk &#252;&#231; harf diye bir k&#305;s&#305;tlama yok. &#214;nce buna a&#231;&#305;klma getirmek isterim;

AraMet = AranacakMetin
AraUzn = len(AraMet)

de&#287;erlerimiz tespit edilmi&#351; olsun, c:\resim klas&#246;r&#252;ndeki ilk arauzn harfi AraMet ile ba&#351;layan jpg uzant&#305;l&#305; dosya ka&#231; adettir?
Sorumuz budur.
 
Sizin kodlarınız içinde yaptığım revizyonda aşağıdaki gibi çalışıyor,
Sayın haluk'un yöntemindeki reviyon ne şekilde olmalı acaba?
Yada şöyle sorayaım dosya sayısı artıkça bu yöntem mi, If MyFile Like araIsm yöntemi mi, kasmaksızın(stabil) çalışır?
mü yoksa
Kod:
Sub TestKlsSay_rakkas()
Dim MyPath, MyFile, AraMet, isim As String, AraUzn%
Dim adt As Integer
    MyPath = "C:\Resim"
    MyFile = Dir(MyPath & "\*.jpg", vbDirectory)
    AraMet = "[vtmahbirimler.xls-ilveilce]_[E8_H21]"
    AraUzn = Len(AraMet)
    Do While MyFile <> ""
' ifadenizde ilk 3 harften bahsediyorsanız eğer ,aşagıdaki kod'uda kullanabilirsiniz
       If Left(MyFile, AraUzn) = AraMet Then
            adt = adt + 1
isim = MyFile & vbCrLf & isim
        End If
        MyFile = Dir
    Loop
    MsgBox "Bulunan dosya sayısı : " & adt & " adet"
MsgBox "Bulunan dosya isimler: " & vbCrLf & isim & vbCrLf
End Sub
 
Esenlikler
excel vba ile bir klas&#246;r&#252;n i&#231;inde "abc" ile ba&#351;layan jpg uzant&#305;l&#305; dosyalar&#305;n say&#305;s&#305;n&#305; nas&#305;l tespit edebiliriz?

klsr =c:\resim
bas = "abc"
son = ".jpg"
Ara = ???
adt = Ara.????

&#304;lk mesaj&#305;n&#305;z da "abc" ile ba&#351;layan dedi&#287;iniz i&#231;in ben &#246;yle d&#252;&#351;&#252;nd&#252;m.Aksi bir durumda Haluk Bey'in kodu yeterlidir.
 
Selamlar,

Kodu a&#351;a&#287;&#305;daki &#351;ekilde de&#287;i&#351;tirip denermisiniz.

Kod:
Sub TestKlsSay()
Dim MyPath, MyFile As String
Dim araIsm As String
Dim adt As Integer
    MyPath = "C:\Resim"
    araIsm = "[vtmahbirimler.xls-ilveilce]_[E8_H21]"
    araIsm = Replace(Replace(araIsm, "[", "("), "]", ")")
    MyFile = Dir(MyPath & "\*.jpg", vbDirectory)
    Do While MyFile <> ""
        If Replace(Replace(MyFile, "[", "("), "]", ")") Like "*" & araIsm & "*" Then
            adt = adt + 1
        End If
        MyFile = Dir
    Loop
    MsgBox "Bulunan dosya say&#305;s&#305; : " & adt & " adet"
End Sub
 
da... o kodda "[" ve "]" karekterlerini be&#287;enmiyor :(

&#350;imdi be&#287;enir art&#305;k.... :mrgreen:

Kod:
Sub Test2()
    MyPath = "C:\Resim"
    MyFile = Dir(MyPath & "\*.jpg", vbDirectory)
    Do While MyFile <> ""
        If MyFile Like "[[]vtmahbirimler.xls-ilveilce[]]_[[]E8_H21[]]*" Then
            adt = adt + 1
        End If
        MyFile = Dir
    Loop
    MsgBox "Bulunan dosya say&#305;s&#305; : " & adt & " adet"
End Sub
 
Korhan hocam anla&#351;&#305;lan k&#246;&#351;eli paranteleri kabul ettirmenin yolu yok, neyse
(vtmahbirimler.xls-ilveilce)_(E8_H21)_004.jpg
[vtmahbirimler.xls-ilveilce]_[E8_H21]_004.jpg

aras&#305;nda fark etmiyor &#231;&#252;nk&#252;, neyse buna da raz&#305; olaca&#287;&#305;z art&#305;k. &#199;ok te&#351;ekk&#252;r ederim.

&#304;lave olarak &#350;&#246;yle bir &#351;ey sorsam;
Bulunan dosyalar&#305;n listesini aktif &#231;al&#305;&#351;ma sayfas&#305;n&#305;n a1 h&#252;cresinden itibaren yaz nas&#305;l derim?
 
Haluk hocam alakan&#305;za te&#351;ekk&#252;r ederim;

Kod:
Sub TestKlsSay_Haluk()
Dim MyPath, MyFile As String
Dim araIsm As String
Dim adt As Integer
    araIsm = "[[]vtmahbirimler.xls-ilveilce[]]_[[]E8_H21[]]"
    araIsm = araIsm & "*" 'araIsm  ile ba&#351;layanlar
  '  araIsm = "[vtmahbirimler.xls-ilveilce]_[E8_H21]*"
  '  araIsm = Replace(Replace(araIsm, "[", "["), "]", "]")
    MyPath = "C:\Resim"
    MyFile = Dir(MyPath & "\*.jpg", vbDirectory)
    Do While MyFile <> ""
        If MyFile Like araIsm Then
            adt = adt + 1
        End If
        MyFile = Dir
    Loop
    MsgBox "Bulunan dosya say&#305;s&#305; : " & adt & " adet"
End Sub

kod dizesinde prosod&#252;r i&#351;lerken [vtmahbirimler.xls-ilveilce]_[E8_H21] haline gelen metin ile ba&#351;layanlar&#305;n listesini &#246;&#287;renip sonuna saya&#231;nosu eklemek amac&#305;m. dolay&#305;s&#305; ile "[[]vtmahbirimler.xls-ilveilce[]]_[[]E8_H21[]]" haline kendili&#287;inden d&#246;n&#252;&#351;t&#252;rmem gerekiyor ancak replacelala denedim tutturamad&#305;m.
Tekrar yard&#305;m ederseniz sevinirim.
 
Son düzenleme:
&#246;z&#252;r dilerim hata ile d&#246;mn&#252;&#351;t&#252;rmemem yazm&#305;&#351;&#305;m, do&#287;rusu d&#246;n&#252;&#351;t&#252;rmem olacakt&#305;r.
 
Neden bahsetti&#287;inizi anlam&#305;yorum, d&#246;n&#252;&#351;t&#252;r&#252;len falan bir&#351;ey yok. Zaten herhangibir &#351;eyi de d&#246;n&#252;&#351;termeye gerek yok.......

&#214;nerdi&#287;im kodu &#231;al&#305;&#351;t&#305;r&#305;nca, [vtmahbirimler.xls-ilveilce]_[E8_H21]_004.jpg gibi dosyalardan ka&#231; tane oldu&#287;unu &#246;&#287;reniyorsunuz.

Bu de&#287;il mi sizin sordu&#287;unuz ?????????


.
 
&#351;&#246;yle izah edeyim hocam;

Kod:
Sub subhsr_Selection_ScreenShot()
'#########################################################################################################'
'#########         Aktif &#199;al&#305;&#351;ma Sayfas&#305;nda se&#231;ili olan h&#252;creleri ve &#252;zerindeki                  #########'
'#########         grafik, resim vs. &#351;ekillerin resmini &#231;ekip c:\resim alt&#305;na                    #########'
'#########         kaydeder.                                                                     #########'
'#########         [URL="http://www.Excel.web.tr"]www.Excel.web.tr[/URL] den Anemos ve Seyit Diken 'in katk&#305;lar&#305;yla                   #########'
'#########         hsayar taraf&#305;ndan haz&#305;rlanm&#305;&#351;t&#305;r.                                             #########'
'#########################################################################################################'
1 Dim DsSisKnt, Pic, graf, Dosyalar, dosya, ws, wb As Object
2 Dim KytKls$, uznKls$, KytDAd$, uznDAd$, ara$, sycDno&#37;, Arlk
3 Set DsSisKnt = CreateObject("Scripting.FileSystemObject")
4 Set ws = Selection.Parent:         Set wb = ws.Parent
5 On Error GoTo hata
'\  Se&#231;ili Alan&#305;n resmini &#231;eker;
6 Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture: GoTo islem
7 hata:
8    MsgBox "Birle&#351;ik aral&#305;kta bir se&#231;im yapmal&#305;s&#305;n&#305;z": GoTo Son
9 islem:
'**\     &#199;ekilen resmi pic de&#287;i&#351;kenine atayarak yap&#305;&#351;t&#305;r, sayfadan siler.
10        Set Pic = ActiveSheet.Pictures.Paste
11        With Pic
12      '      .Copy
13            .Delete
14        End With
15        Set Pic = Nothing
'**\     Resmin kaydedilece&#287;i klas&#246;r ve dosya ad&#305; ve uzunluk bilgileri haz&#305;rlan&#305;r.
16        KytKls = "C:\Resim\":           Call SubHsr_Klsr_Yks_Olstr(KytKls)
17        uznKls = Len(KytKls)
171       Arlk = "[" & Replace(Replace(Selection.address, ":", "_", 1), "$", "", 1) & "]_"
18        [COLOR=red][B]KytDAd = "[" & wb.Name & "-" & ws.Name & "]_" & Arlk[/B][/COLOR]
           uznDAd = Len(KytDAd)
'**\    Dizindeki Dosya Adlar&#305;n&#305; Kaydedilecek Dosya Ad&#305; ile kar&#351;&#305;la&#351;t&#305;r...
19        Set Dosyalar = DsSisKnt.GetFolder(KytKls).Files
20        For Each dosya In Dosyalar
21            ara = Mid$(KytKls & KytDAd, uznKls + 1, uznDAd)
22            If ara = KytDAd Then sycDno = sycDno + 1
23        Next
24        Set Dosyalar = Nothing:                 Set dosya = Nothing
'**\    &#199;ekilen Resmi, jpg olarak kaydet
25        Set graf = ActiveSheet.ChartObjects.Add(1, 1, Selection.Width + 2, Selection.Height + 2).Chart
251       KytDAd = KytKls & KytDAd & Format(sycDno + 1, "000") & ".jpg"
26        With graf
27            .Paste
28            .Export KytDAd
29            .Parent.Delete
30        End With
31        Set graf = Nothing
32 Son:
33    Set DsSisKnt = Nothing
34    Set ws = Nothing
End Sub

18. sat&#305;ra geldi&#287;inda kaydedilecek dosyan&#305;n ad&#305; olu&#351;mu&#351; oluyor yani [vtmahbirimler.xls-ilveilce]_[E8_H21]_ haline geliyor. buradan sonra ba&#351;&#305; bu halde olan hi&#231; dosya yoksa [vtmahbirimler.xls-ilveilce]_[E8_H21]_001 olarak kaydetmesini istiyorum. vtmahbirimler.xls-ilveilce]_[E8_H21]_ ile ba&#351;layan 5 dosya varsa [vtmahbirimler.xls-ilveilce]_[E8_H21]_006 olarak kaydetmesini istiyorum.

19 ila 23. sat&#305;rlar aras&#305;nda yapt&#305;&#287;&#305;m denemede KytDAd ile ba&#351;layanlar&#305; de&#287;il,resimdende g&#246;r&#252;lece&#287;i &#252;zere dizindeki dosya say&#305;s&#305;na g&#246;re sayac&#305; art&#305;r&#305;yor.

resimekmodlyardmnj0.jpg


bu nedenle ben &#231;ekilen resmin abc001,abc002 ile giderken alan de&#287;i&#351;ince bcd001, bcd002 gibi gitmesini istiyorum.

Sayg&#305;lar&#305;mla.


Kod:
[LEFT]Sub TestKlsSay_Haluk()
Dim MyPath, MyFile As String
Dim araIsm As String
Dim adt As Integer
   araIsm = "[[]vtmahbirimler.xls-ilveilce[]]_[[]E8_H21[]]"
   araIsm = araIsm & "*" 'araIsm  ile ba&#351;layanlar
 '  araIsm = "[vtmahbirimler.xls-ilveilce]_[E8_H21]*"
 '  araIsm = Replace(Replace(araIsm, "[", "["), "]", "]")
   MyPath = "C:\Resim"
   MyFile = Dir(MyPath & "\*.jpg", vbDirectory)
   Do While MyFile <> ""
       If MyFile Like araIsm Then
           adt = adt + 1
       End If
       MyFile = Dir
   Loop
   MsgBox "Bulunan dosya say&#305;s&#305; : " & adt & " adet"
End Sub[/LEFT]

Yani sizin kodlar&#305;n&#305;zdaki AraIsm de&#287;i&#351;keni benim KytDAd de&#287;i&#351;kenine e&#351;it olacak ve arama yap&#305;lacakt&#305;r.
 
&#214;nerdi&#287;im kodu fonksiyon haline getirip, sizin kodun i&#231;inden &#231;a&#287;&#305;rd&#305;m....

.

Kod:
Sub subhsr_Selection_ScreenShot_R()
'#########################################################################################################'
'#########         Aktif &#199;al&#305;&#351;ma Sayfas&#305;nda se&#231;ili olan h&#252;creleri ve &#252;zerindeki                  #########'
'#########         grafik, resim vs. &#351;ekillerin resmini &#231;ekip c:\resim alt&#305;na                    #########'
'#########         kaydeder.                                                                     #########'
'#########         www.Excel.web.tr den Anemos ve Seyit Diken 'in katk&#305;lar&#305;yla                   #########'
'#########         hsayar taraf&#305;ndan haz&#305;rlanm&#305;&#351;t&#305;r.                                             #########'
'#########################################################################################################'
1 Dim DsSisKnt, Pic, graf, Dosyalar, dosya, ws, wb As Object
2 Dim KytKls$, uznKls$, KytDAd$, uznDAd$, ara$, sycDno&#37;, Arlk
3 Set DsSisKnt = CreateObject("Scripting.FileSystemObject")
4 Set ws = Selection.Parent:         Set wb = ws.Parent
5 On Error GoTo hata
'\  Se&#231;ili Alan&#305;n resmini &#231;eker;
6 Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture: GoTo islem
7 hata:
8    MsgBox "Birle&#351;ik aral&#305;kta bir se&#231;im yapmal&#305;s&#305;n&#305;z": GoTo Son
9 islem:
'**\     &#199;ekilen resmi pic de&#287;i&#351;kenine atayarak yap&#305;&#351;t&#305;r, sayfadan siler.
10        Set Pic = ActiveSheet.Pictures.Paste
11        With Pic
12      '      .Copy
13            .Delete
14        End With
15        Set Pic = Nothing
'**\     Resmin kaydedilece&#287;i klas&#246;r ve dosya ad&#305; ve uzunluk bilgileri haz&#305;rlan&#305;r.
16        KytKls = "C:\Resim\":           'Call SubHsr_Klsr_Yks_Olstr(KytKls)
17        uznKls = Len(KytKls)
171       Arlk = "[" & Replace(Replace(Selection.Address, ":", "_", 1), "$", "", 1) & "]_"
18        KytDAd = "[" & wb.Name & "-" & ws.Name & "]_" & Arlk
           uznDAd = Len(KytDAd)
'**\    Dizindeki Dosya Adlar&#305;n&#305; Kaydedilecek Dosya Ad&#305; ile kar&#351;&#305;la&#351;t&#305;r...
'19        Set Dosyalar = DsSisKnt.GetFolder(KytKls).Files
'20        For Each dosya In Dosyalar
'21            ara = Mid$(KytKls & KytDAd, uznKls + 1, uznDAd)
'22            If ara = KytDAd Then sycDno = sycDno + 1
'23        Next
          sycDno = GetLast(KytKls & KytDAd)
24        Set Dosyalar = Nothing:                 Set dosya = Nothing
'**\    &#199;ekilen Resmi, jpg olarak kaydet
25        Set graf = ActiveSheet.ChartObjects.Add(1, 1, Selection.Width + 2, Selection.Height + 2).Chart
251       KytDAd = KytKls & KytDAd & Format(sycDno + 1, "000") & ".jpg"
26        With graf
27            .Paste
28            .Export KytDAd
29            .Parent.Delete
30        End With
31        Set graf = Nothing
32 Son:
33    Set DsSisKnt = Nothing
34    Set ws = Nothing
End Sub
'
Function GetLast(MyPath As String) As Long
    Dim adt As Long
    MyFile = Dir(MyPath & "*.jpg", vbDirectory)
    Do While MyFile <> ""
        If MyFile Like "[[]" & ThisWorkbook.Name & "-" & ActiveSheet.Name & "[]]_[[]" & Replace(Selection.Address(False, False), ":", "_") & "[]]*" Then
            adt = adt + 1
        End If
        MyFile = Dir
    Loop
    GetLast = adt
End Function
 
ellerinize sa&#287;l&#305;k hocam istedi&#287;im buydu sadece ThisWorkbook tan de&#287;il ActiveWorkbook Kullanamk zorunday&#305;m onu de&#287;i&#351;tirdim.
 
Geri
Üst