• DİKKAT

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

sayfa adlandırma hatası

Katılım
11 Şubat 2016
Mesajlar
199
Excel Vers. ve Dili
2013
6 sayfalık tablomda hücreye göre adlandırma yapmak istiyorum
fakat makroda hata var çözemedim
ilgili hücrelerde ilgili keimeleri bulunca istediğim ismi yazmalı buna göre düşeyara yapıyorum. tablolar sürekli güncelleniyor ve tekrar aktarma yapıyorum dışarıdan. sonrada tekrar adlandırmak vakit alıyor
yardımınızı bekliyorum.

ekledim

Sub SayfaAdlandır()
For a = 1 To Worksheets.Count

If Sheets(a).[L4] = "Ölçü Noksanı" Then
Sheets(a).Name = "M2"
Exit For
'1. Sayfa

ElseIf Sheets(a).[M4] = "Kesme ve Tomruklama" Then
Sheets(a).Name = "M1"
Exit For
'2. Sayfa

ElseIf Sheets(a).[K4] = "Tefriğe Giden" Then
Sheets(a).Name = "O1"
Exit For
'3. Sayfa

ElseIf Sheets(a).[T4] = "Ölçü Fazlası" Then
Sheets(a).Name = "O2"
Exit For
'4. Sayfa

ElseIf Sheets(a).[H4] = "Yükleme" Then
Sheets(a).Name = "SD2"
Exit For
'5. Sayfa

If Sheets(a).[J4] = "Sarfiyata Giden" Then
Sheets(a).Name = "SD1"
'6. Sayfa

Exit For
End If
Next
End Sub
 

Ekli dosyalar

Son düzenleme:
Selamlar,
Var olan bir sayfa adını yeniden vermeye çalışıyor olabilirsiniz. Tabi sadece bir tahmin... Örnek dosya ekleyebilirseniz, daha kesin cevap verilebilir.
 
dosya

dosya ekledim yukarıda teşekkür ederim şimdiden

bu dosyaları yenilerini aktaracağımda sileceğim çakışma olmasın diye
 
Satırın birinde elseif yerine if yazmışsınız.
Kod:
Sub SayfaAdlandır()
For a = 1 To Worksheets.Count

If Sheets(a).[L4] = "Ölçü Noksanı" Then
Sheets(a).Name = "M2"
Exit For
'1. Sayfa

ElseIf Sheets(a).[M4] = "Kesme ve Tomruklama" Then
Sheets(a).Name = "M1"
Exit For
'2. Sayfa

ElseIf Sheets(a).[K4] = "Tefriğe Giden" Then
Sheets(a).Name = "O1"
Exit For
'3. Sayfa

ElseIf Sheets(a).[T4] = "Ölçü Fazlası" Then
Sheets(a).Name = "O2"
Exit For
'4. Sayfa

ElseIf Sheets(a).[H4] = "Yükleme" Then
Sheets(a).Name = "SD2"
Exit For
'5. Sayfa

[B][COLOR="DarkRed"]ElseIf [/COLOR][/B]Sheets(a).[J4] = "Sarfiyata Giden" Then
Sheets(a).Name = "SD1"
'6. Sayfa

Exit For
End If
Next
End Sub
 
hata

hocam kod hata vermedi ama bu seferde sayfaları adlandırmadı biri hariç hiçbiri adlandırılmadı gündüz sorun yoktu bi kontrol etme şansınız varmı acaba
 
Aşağıdaki şekilde kullanmanız gerekiyor; fakat kodunuzda bir mantık hatası var. 5. sayfaya geldiğinde mükerrer ad vermeye çalıştığından hata alacaksınız. Kod mantığını yeniden kurgulamanızı öneriyorum. Tabloları oluştururken sayfalarda aynı ismin tekrar etmeyeceğine emin olmalısınız.
Not: 2. sayfanın adıyla 5. sayfa çakışıyor.
Kod:
Sub SayfaAdlandır()
For a = 1 To Worksheets.Count
If Sheets(a).[M4] = "Kesme ve Tomruklama" Then
Sheets(a).Name = "M1"
'1. Sayfa
ElseIf Sheets(a).[L4] = "Ölçü Noksanı" Then
Sheets(a).Name = "M2"
'2. Sayfa
ElseIf Sheets(a).[K4] = "Tefriğe Giden" Then
Sheets(a).Name = "O1"
'3. Sayfa
ElseIf Sheets(a).[T4] = "Ölçü Fazlası" Then
Sheets(a).Name = "O2"
'4. Sayfa
ElseIf Sheets(a).[J4] = "Sarfiyata Giden" Then
Sheets(a).Name = "SD1"
'6. Sayfa
ElseIf Sheets(a).[H4] = "Yükleme" Then
Sheets(a).Name = "SD2"
'5. Sayfa
End If
Next
End Sub
 
Naçizane fikrim:

Yazdığınız kodda yer alan
Kod:
Exit For

satırları istenen şart sağlandığında for-next döngüsünü sonlandırmaya yarıyor. Kod ilk döngüde ilk sayfanın ismini değiştirince exit for satırı nedeniyle döngüden çıkıyor ve diğer sayfalara bakmadan işlemi sonlandırıyor.


Eğer Exit For yerine GoTo 10 kullanır ve kodun en sonunda
Kod:
End if
ile
Kod:
Next
satırları arasına
Kod:
10:
satırını eklerseniz, herhangi bir şart sağlandığında kod diğer sayfaya geçer.

Ancak Sayın leumruk'un da belirttiği gibi istenen şarta uyan birden fazla sayfa varsa (ki örnek dosyanızda M2 için 2. ve 5. sayfalarda bu şart sağlanıyor) aynı isimli sayfa dosyada bulunduğundan makro hata verir. Bunu önlemek için de kodun en başına
Kod:
For
satırından önce
Kod:
On Error Resume Next
satırını ekleyebilirsiniz. Bu durumda kod hata vermez, o sayfayı pas geçer.
 
teşekkürler

teşekkür ederim hocam sayenizde düzelttim. bu koda ilave yapma şansım varmı acaba yani bu sayfaları adlandırmadan önce M1 M2 O1 O2 SD1 SD2 sayfalarını silmem lazım sayfalar yoksa silinecek sayfa yok mesajı vermem lazım. o zaman hata oranını daha aza indirgeyebilirim.
 
Kod:
On Error Resume Next
satırı ile
Kod:
For
satırı arasına aşağıdaki kodları ilave ederseniz, önce tüm sayfa adlarını kontrol eder ve belirttiğiniz sayfalar varsa siler:

Kod:
For b = Sheets.Count To 1 Step -1
    If Sheets(b).Name = "M1" Or Sheets(b).Name = "M2" Or Sheets(b).Name = "O1" Or _
    Sheets(b).Name = "O2" Or Sheets(b).Name = "SD1" Or Sheets(b).Name = "SD2" Then
        Sheets(b).Delete
    End If
Next

Ancak bu kodu kullanırken dikkatli olun, verilerinizi yedeklemeyi unutmayın. Geri dönüşü olmayabilir.

Ayrıca bilginiz olsun isimlendirme hatası sayfa önceden var diye oluşmuyor. Örneğin örnek dosyanızda 2 ve 5 numaralı sayfalar aynı şartı sağlayıp M2 adını alıyorlar. Kodu bu verdiğim şekilde kullansanız bile önceden M2 sayfası olmadığından sayfa silinmeyecek, 2. sayfaya M2 ismini verecek, 5 sayfanın adını değiştirmeyecektir.
 
teşekkür ederim hocam sayenizde düzelttim. bu koda ilave yapma şansım varmı acaba yani bu sayfaları adlandırmadan önce M1 M2 O1 O2 SD1 SD2 sayfalarını silmem lazım sayfalar yoksa silinecek sayfa yok mesajı vermem lazım. o zaman hata oranını daha aza indirgeyebilirim.
Ali Bey,
Size sayfa var mı yok mu kontrolü sağlayan bir KTF hazırladım. Bunu kullanarak kod mantığınızı yeniden kurgulamanızı öneriyorum. Bu şekilde hata vermiyor.
Kod:
Function SayfaKontrol(syf As Variant) As Boolean
SayfaKontrol = False
For x = 1 To Sheets.Count
If Sheets(x).Name = syf Then
SayfaKontrol = True
Exit For
End If
Next
End Function
Kod:
Sub SayfaAdlandır()
deg = Array("", "Kesme ve Tomruklama", "Ölçü Noksanı", "Tefriğe Giden", "Ölçü Fazlası", "Sarfiyata Giden", "Yükleme")
For a = 1 To Worksheets.Count
If Sheets(a).[M4] = deg(a) Then
If SayfaKontrol("M1") = False Then Sheets(a).Name = "M1"
'1. Sayfa
ElseIf Sheets(a).[L4] = deg(a) Then
If SayfaKontrol("M2") = False Then Sheets(a).Name = "M2"
'2. Sayfa
ElseIf Sheets(a).[K4] = deg(a) Then
If SayfaKontrol("O1") = False Then Sheets(a).Name = "O1"
'3. Sayfa
ElseIf Sheets(a).[T4] = deg(a) Then
If SayfaKontrol("O2") = False Then Sheets(a).Name = "O2"
'4. Sayfa
ElseIf Sheets(a).[J4] = deg(a) Then
If SayfaKontrol("SD1") = False Then Sheets(a).Name = "SD1"
'6. Sayfa
ElseIf Sheets(a).[H4] = deg(a) Then
If SayfaKontrol("SD2") = False Then Sheets(a).Name = "SD2"
'5. Sayfa
End If
Next
End Sub
 
silme işi

Hocam kodlar oldu ama sayfalarda başka isimler bulduğundan başka sayfalarıda adlandırıyor
silme kodunu ayırayım diyorum aşağıdaki verdiğiniz kod ile silme işlemi yapıyor sayfa yoksa silinecek sayfa yok mesajını nasıl verebilirim.


Sub MOSDSil()
On Error Resume Next
For b = Sheets.Count To 1 Step -1
If Sheets(b).Name = "M1" Or Sheets(b).Name = "M2" Or Sheets(b).Name = "O1" Or _
Sheets(b).Name = "O2" Or Sheets(b).Name = "SD1" Or Sheets(b).Name = "SD2" Then
Sheets(b).Delete
End If
10:
Next
End Sub
 
EN yapmak istediğinizi daha açık yazsanız daha iyi olur aslında. Böyle parça parça çözmek hem sizi hem bizi yoruyor.

aşağıdaki makro silme yapar, silinecek sayfa yoksa uyarı verir. Ancak aklınızda olsun dosyadaki tüm sayfalar silinirse sıkıntı çıkar:

Kod:
Sub MOSDSil()
sil = 0
For b = Sheets.Count To 1 Step -1
    If Sheets(b).Name = "M1" Or Sheets(b).Name = "M2" Or Sheets(b).Name = "O1" Or _
    Sheets(b).Name = "O2" Or Sheets(b).Name = "SD1" Or Sheets(b).Name = "SD2" Then
        Sheets(b).Delete
        sil = sil + 1
    End If
Next
If sil = 0 Then
    MsgBox "Silinecek sayfa yok!", vbInformation
End If
End Sub
 
oldu bu

yusuf bey teşekkür ederim yardımlarınız için. yaptığım çalışma sürekli değişikliğe uğruyor ister istemez böyle oldu kusura bakmayın. bir sonraki aşamada başka bi hata olduğunu hissedince değiştirmek zorunda kaldım. tekrar teşekkürler.
 
Geri
Üst