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.
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.
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.
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.
Söz dizimi
Name deyimi iki yol alır ve araya As sözcüğü konur: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.
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).
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.| A | B | C | |
|---|---|---|---|
| 1 | Eski Ad | Yeni Ad | Durum |
| 2 | C:\Raporlar\Satis_Ocak.xlsx | C:\Raporlar\Satis_Ocak_Kapandi.xlsx | |
| 3 | C:\Raporlar\Stok_Subat.xlsx | C:\Raporlar\Stok_Subat_Kesin.xlsx | |
| 4 | C:\Raporlar\Personel_Mart.xlsx | C:\Raporlar\Personel_Mart_Son.xlsx |
Ad DeğişikliğiExcelDepo v1.0.0
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Dosya | Kaynak Klasör | Hedef Klasör | Durum |
| 2 | Satis_Ocak.xlsx | C:\Raporlar | C:\Raporlar\Arsiv | |
| 3 | Satis_Subat.xlsx | C:\Raporlar | C:\Raporlar\Arsiv | |
| 4 | Satis_Mart.xlsx | C:\Raporlar | C:\Raporlar\Arsiv |
Taşıma PlanıExcelDepo v1.0.0
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.| A | B | C | |
|---|---|---|---|
| 1 | Dosya Adı | Rapor Tarihi | Yeni Ad |
| 2 | Satis_Raporu.xlsx | 2024-03-15 | Satis_Raporu_2024-03.xlsx |
| 3 | Stok_Listesi.xlsm | 2024-07-02 | Stok_Listesi_2024-07.xlsm |
| 4 | Personel.xlsx | 2024-11-30 | Personel_2024-11.xlsx |
| 5 | Musteri_Listesi.csv | 2025-01-09 | Musteri_Listesi_2025-01.csv |
| 6 | Butce_Plani.xlsx | 2025-05-21 | Butce_Plani_2025-05.xlsx |
Yeni AdlarExcelDepo v1.0.0
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.