Özellik ikonu

Name

İndirme izni yok

Genel Bakış

Name (Name statement), diskteki bir dosyanın ya da klasörün adını değiştiren VBA deyimidir. Yeni yol başka bir klasörü gösteriyorsa dosya aynı işlemle o klasöre de taşınır. Raporları toplu olarak yeniden adlandırmak, arşivlemek veya tarih eki eklemek gibi dosya yönetimi işlerinde kullanılır.

Söz dizimi​

Name deyimi iki yol alır ve araya As sözcüğü konur:
VBA
Name eskiYol As yeniYol
  • eskiYol: Var olan dosyanın ya da klasörün tam yolu veya yalnızca adı; zorunludur. Yalnızca ad verilirse geçerli klasör kullanılır. Klasör yolu da verilebilir.
  • yeniYol: Dosyanın alacağı yeni ad ve konum; zorunludur. Bu adla bir dosya veya klasör zaten varsa işlem hata verir.
Name bir işlev değildir, değer döndürmez. Başarısız olursa çalışma zamanı hatası oluşturur; bu nedenle hata denetimi sizin sorumluluğunuzdadır.

Taşıma, yeniden adlandırma ve sınırlar​

Name iki işi tek deyimde yapar:
  • Yeniden adlandırma: İki yol aynı klasörde ise yalnızca ad değişir.
  • Taşıma: Yeni yol başka bir klasörde ise dosya oraya taşınır. Hedef klasör önceden var olmalıdır; Name klasör oluşturmaz. Gerekirse önce MkDir deyimini kullanın.
  • Sürücü sınırı: Dosya başka bir sürücüye taşınamaz. Bu durumda FileCopy ile kopyalayıp ardından Kill ile silmeniz gerekir.
  • Joker karakter: Yollarda * ve ? kullanılamaz. Birden çok dosya için döngü kurup her dosyaya ayrı ayrı Name uygulayın.
  • Açık dosya: Açık olan bir dosya üzerinde Name kullanmak hata verir; önce dosyayı kapatın.

Sık görülen hata kodları​

Name başarısız olduğunda Err.Number değeri nedeni gösterir:
  • 53: Dosya bulunamadı (eskiYol yok).
  • 58: Yeni ad zaten var.
  • 55: Dosya açık.
  • 75: Yol veya dosya erişim hatası (ör. sürücüler arası taşıma ya da yazma izni yok).
  • 76: Yol bulunamadı (hedef klasör yok).
Kodu On Error Resume Next ile sarıp ardından Err.Number değerini Select Case ile denetlemek, makronun yarıda kesilmesini önler.

Name özelliğiyle karıştırmayın​

VBA'da Name aynı zamanda birçok nesnenin özelliğidir: Worksheet.Name sayfa adını, Workbook.Name açık çalışma kitabının dosya adını (salt okunur), Range.Name hücre aralığının adını verir. Bu özellikler dosya sistemine dokunmaz. Bir sayfanın sekme adını değiştirmek için Worksheet.Name özelliğine yeni metni atarsınız. Name deyimi ise yalnızca diskteki dosya ve klasörler içindir.

1. Dosyaları listeden yeniden adlandırma​

Sayfada eski ve yeni dosya yolları listelenmiştir. Aşağıdaki kodu standart bir modüle yapıştırın. Makro her satır için kaynağın var olduğunu ve yeni adın boş olduğunu denetler, ardından Name deyimini çalıştırıp sonucu Durum sütununa yazar.
VBA 23 satır
Option Explicit

Sub DosyalariYenidenAdlandir()
    Dim ws As Worksheet
    Dim r As Long
    Dim eskiAd As String, yeniAd As String

    Set ws = ActiveSheet
    For r = 2 To 4
        eskiAd = ws.Cells(r, 1).Value
        yeniAd = ws.Cells(r, 2).Value

        If Dir(eskiAd) = "" Then
            ws.Cells(r, 3).Value = "Kaynak dosya yok"
        ElseIf Dir(yeniAd) <> "" Then
            ws.Cells(r, 3).Value = "Yeni ad zaten var"
        Else
            ' Dosya aynı klasörde yeni adını alır
            Name eskiAd As yeniAd
            ws.Cells(r, 3).Value = "Yeniden adlandırıldı"
        End If
    Next r
End Sub
Name
Formülünü incelemek için bir hücre seçin.
ABC
1Eski AdYeni AdDurum
2C:\Raporlar\Satis_Ocak.xlsxC:\Raporlar\Satis_Ocak_Kapandi.xlsx
3C:\Raporlar\Stok_Subat.xlsxC:\Raporlar\Stok_Subat_Kesin.xlsx
4C:\Raporlar\Personel_Mart.xlsxC:\Raporlar\Personel_Mart_Son.xlsx
Ad DeğişikliğiExcelDepo v1.0.0
Bu örnek dosya sistemini değiştirdiği için burada çalıştırılmaz. Kendi bilgisayarınızda yolları gerçek dosyalarınıza göre düzenleyip deneyin. Makro, var olmayan bir dosyada ya da dolu bir yeni adda hata vermek yerine Durum sütununa açıklama yazar. Başarılı satırlarda dosya aynı klasörde yeni adıyla kalır.

2. Dosyayı arşiv klasörüne taşıma ve hata denetimi​

Sayfada dosya adı, kaynak klasör ve hedef klasör yer alır. Kodu standart bir modüle yapıştırın. Hedef klasör önceden var olmalıdır. Makro Name ile dosyayı taşır ve Err.Number değerine göre Durum sütununu doldurur.
VBA 32 satır
Option Explicit

Sub DosyalariArsiveTasi()
    Dim ws As Worksheet
    Dim r As Long
    Dim kaynak As String, hedef As String

    Set ws = ActiveSheet
    For r = 2 To 4
        kaynak = ws.Cells(r, 2).Value & "\" & ws.Cells(r, 1).Value
        hedef = ws.Cells(r, 3).Value & "\" & ws.Cells(r, 1).Value

        Err.Clear
        On Error Resume Next
        Name kaynak As hedef
        Select Case Err.Number
            Case 0
                ws.Cells(r, 4).Value = "Taşındı"
            Case 53
                ws.Cells(r, 4).Value = "Dosya bulunamadı"
            Case 55
                ws.Cells(r, 4).Value = "Dosya açık, önce kapatın"
            Case 58
                ws.Cells(r, 4).Value = "Hedefte aynı ad var"
            Case 75, 76
                ws.Cells(r, 4).Value = "Yol hatası veya erişim yok"
            Case Else
                ws.Cells(r, 4).Value = "Hata: " & Err.Number
        End Select
        On Error GoTo 0
    Next r
End Sub
Name
Formülünü incelemek için bir hücre seçin.
ABCD
1DosyaKaynak KlasörHedef KlasörDurum
2Satis_Ocak.xlsxC:\RaporlarC:\Raporlar\Arsiv
3Satis_Subat.xlsxC:\RaporlarC:\Raporlar\Arsiv
4Satis_Mart.xlsxC:\RaporlarC:\Raporlar\Arsiv
Taşıma PlanıExcelDepo v1.0.0
Bu örnek dosya taşıdığı için burada çalıştırılmaz. Kaynak ve hedef yolların dosya adı aynı, klasörü farklı olduğundan Name dosyayı yeniden adlandırmaz, taşır. Hedef klasör yoksa 76 numaralı hata oluşur ve makro bunu Durum sütununda bildirir. Hata denetimi On Error GoTo 0 ile her turda kapatıldığı için sonraki satırlar etkilenmez.

3. Name için yeni dosya adlarını hazırlama​

Dosyaları gerçekten yeniden adlandırmadan önce yeni adları sayfada hazırlayıp kontrol etmek güvenlidir. Bu makro her dosya adının uzantısını ayırır ve rapor tarihindeki yılı ile ayı addan sonra ekler. Kodu standart bir modüle yapıştırın.
VBA 30 satır
Option Explicit

Sub YeniAdlariOlustur()
    Dim ws As Worksheet
    Dim son As Long, r As Long, noktaKonum As Long
    Dim eskiAd As String, govde As String, uzanti As String
    Dim tarih As Date

    Set ws = ActiveSheet
    son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For r = 2 To son
        eskiAd = ws.Cells(r, 1).Value
        tarih = ws.Cells(r, 2).Value

        ' Uzantıyı son noktadan itibaren ayır
        noktaKonum = InStrRev(eskiAd, ".")
        If noktaKonum > 0 Then
            govde = Left(eskiAd, noktaKonum - 1)
            uzanti = Mid(eskiAd, noktaKonum)
        Else
            govde = eskiAd
            uzanti = ""
        End If

        ' Name deyiminde yeniYol olarak kullanılabilecek ad
        ws.Cells(r, 3).Value = govde & "_" & Year(tarih) & "-" & _
            Right("0" & Month(tarih), 2) & uzanti
    Next r
End Sub
Name
Formülünü incelemek için bir hücre seçin.
ABC
1Dosya AdıRapor TarihiYeni Ad
2Satis_Raporu.xlsx2024-03-15Satis_Raporu_2024-03.xlsx
3Stok_Listesi.xlsm2024-07-02Stok_Listesi_2024-07.xlsm
4Personel.xlsx2024-11-30Personel_2024-11.xlsx
5Musteri_Listesi.csv2025-01-09Musteri_Listesi_2025-01.csv
6Butce_Plani.xlsx2025-05-21Butce_Plani_2025-05.xlsx
Yeni AdlarExcelDepo v1.0.0
Makro her satırın uzantısını korur ve yıl ile ayı ada ekler. Örneğin ilk dosya için yeni ad Satis_Raporu_2024-03.xlsx, ikinci dosya için Stok_Listesi_2024-07.xlsm olarak oluşur. Ay iki haneli yazıldığı için adlar dosya gezgininde düzgün sıralanır. Bu sütundaki adları Name eskiAd As yeniAd deyimine verirseniz dosyalar bu adlarla yeniden adlandırılır.

Kullanırken dikkat edin​

  • Geri alınamaz: Name işlemi geri alınamaz ve Excel'in Geri Al düğmesiyle döndürülemez. Toplu işlemden önce küçük bir deneme klasöründe çalışın ve gerekirse yedek alın.
  • Önce var olup olmadığını denetleyin: Dir işleviyle kaynağın var, yeni adın boş olduğunu önceden denetleyin. Yine de On Error kullanın; çünkü dosya açık olabilir veya erişim izniniz bulunmayabilir.
  • Açık çalışma kitabını yeniden adlandıramazsınız: Excel'de açık olan bir kitabın dosyası Name ile yeniden adlandırılamaz. Kitabı farklı adla saklamak için SaveAs yöntemini kullanın; eski dosya yerinde kalır.
  • Sürücüler arası taşıma: Name başka bir sürücüye taşıma yapmaz. Bu durumda önce FileCopy ile kopyalayın, kopya başarılıysa Kill ile kaynağı silin.
  • Toplu işlemde joker karakter yok: *.xlsx gibi desenlerle çoklu işlem yapılamaz. Dir ile klasördeki dosyaları döngüyle dolaşıp her biri için ayrı Name çalıştırın. Döngüde Dir çağrısı ile Name işleminin birbirini etkilememesi için dosya adlarını önce bir diziye ya da sayfaya yazmanız önerilir.
  • Klasör adları da değişir: Name klasörleri de yeniden adlandırır. Klasör yolunun sonuna ters bölü eklemeyin ve içindeki dosyaların açık olmadığından emin olun.
  • İlgili konular:
    • Kill: Dosya silme deyimi.
    • FileCopy: Dosya kopyalama deyimi.
    • Dir: Dosya ve klasör varlığını denetleme işlevi.
    • MkDir ve RmDir: Klasör oluşturma ve silme deyimleri.
    • SaveAs: Çalışma kitabını yeni adla kaydetme yöntemi.
    • Worksheet.Name: Sayfa adı özelliği.
    • Range.Name ve Names.Add: Aralık adı tanımlama; Formüller > Tanımlı Adlar > Ad Yöneticisi (Formulas > Defined Names > Name Manager).
    • On Error ve Err nesnesi: Hata yakalama.
    • FileSystemObject: Dosya işlemleri için alternatif nesne modeli.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
14
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst