• DİKKAT

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

ad çakışmasi ve çakışan adları tek tek silme güçlüğü

modoste

Altın Üye
Katılım
31 Mayıs 2008
Mesajlar
3,714
Excel Vers. ve Dili
Microsoft OFFİCE Ev ve İş 2019 TR
merhaba sayın hocalarım
daha önceleri sorudum bi sorumda ad çakışmasında neler yapılmalı diye ve hocalarımdan cevağlam şöyle gelmişti
tanımla / Ad ile adları tek tek siliceksin dendi
uyguladığım basit sayfalar(bi kaç addan oluşan) ama şimdi öyle bi çalışma elime ulaştı ki 10 dakikadır isim seçip siliyorum bitmek bilmiyo
tüm adları tek celsede silebilecek bi kolaylık var mı ?

bir diğer sorum bu ad çakışmaları ne ile oluşur yada 300 tane kadar ad çakışması nasıl oluşabilir.
 
Kod:
Sub IsimleriSil()
    For i = 1 To ActiveWorkbook.Names.Count
        ActiveWorkbook.Names.Item(i).Delete
    Next
End Sub
 
merhaba

hatalı tanımlı adların bulunduğu dosyada bunları temizlemek bazen sorun olur.
kod ile tanımlı ad silindiğinde silinmesini istemediğimiz tanımlı adlar olabilir.
alternatif kod.
Kod:
Sub T_Ad_Sil()
Dim ONAY As Byte
For Each adlar In ThisWorkbook.Names
    ONAY = MsgBox(adlar & vbCrLf & vbCrLf & _
    "Tanımlı Ad Silinsin mi?", vbInformation + vbYesNo)
    
    If ONAY = vbYes Then
        adlar.Delete
    ElseIf ONAY = vbNo Then
    End If
    Next
End Sub
 
sayın uzmanamele ve diğer hocalarım
bugün 3 sekmeden oluşan çalışma dosyamda çalışırken 2 sekmeden oluşan başka bi dosyadan sekmeleri kopyala özel yapıştır (benim açık sayfamı seçmişken) sayfa sonuna yapıştır dediğim anda yine ad çakışması uyarısı belirdi yaklaşık 50 enter dan sonra çalışma sayfası kullanılır hale geldi.

şimdi ben bu durumda ad çakışma hatalarının sebeplerini bilmediğimden basit soru sorcam
benim zaten 3 sekmemde bu sorun yoktu başka bi yerden 2 sekme kopyaladım ve bu hata belirtisi yine geldi

bu yazılan kodu nasıl yazacağımı detaylı olarak yazabilirmisiniz
hangi sekme açıkken kod yazıcam ve bu kod olayını tam bilemiyorum hep unutuyorum
yardımcı olurmusunuz.
 
Ben daha önce rastlamadığım için soruyorum, ad çakışması, aynı isimden birden fazla olduğunda mı oluşuyor ? Eğer böyle ise belki bir kod yardımıyla halledilebilir.
 
merhaba

hamitcan bey, tanımlı ad çakışmasından kaynaklanıyor.
şöyle örnekleyeyim: deneme tanımlı adını $A$1 hücresi için oluşturduğumuzu varsayalım. bu durumda sayfayı kopyaladığımızda, kopyalanan sayfada da deneme tanımlı adı $A$1 hücre değeri için olacaktır. bu durumda aynı adı kullanmak istiyor musunuz diye sorar.

sizin önerdiğiniz kod bütün tanımlı adları siler, benim önerdiğim ise bu silme işlemini seçebilirsiniz.
bütün tanımlı adlar silindiğinde mesela yazdırma alanı da tanımlı olacağından onu da siler, oysa bunu silmek istemeyebiliriz.
 
sayın uzmanamele ve diğer hocalarım
bugün 3 sekmeden oluşan çalışma dosyamda çalışırken 2 sekmeden oluşan başka bi dosyadan sekmeleri kopyala özel yapıştır (benim açık sayfamı seçmişken) sayfa sonuna yapıştır dediğim anda yine ad çakışması uyarısı belirdi yaklaşık 50 enter dan sonra çalışma sayfası kullanılır hale geldi.

şimdi ben bu durumda ad çakışma hatalarının sebeplerini bilmediğimden basit soru sorcam
benim zaten 3 sekmemde bu sorun yoktu başka bi yerden 2 sekme kopyaladım ve bu hata belirtisi yine geldi

bu yazılan kodu nasıl yazacağımı detaylı olarak yazabilirmisiniz
hangi sekme açıkken kod yazıcam ve bu kod olayını tam bilemiyorum hep unutuyorum
yardımcı olurmusunuz.

merhaba

syn modoste, önerdiğim kodları bir standart modüle yazın ve kodu çalıştırın.
 
sayın uzmanamele
syn modoste, önerdiğim kodları bir standart modüle yazın ve kodu çalıştırın
bu dediklerinizin nasıl yapıldığını unuttum.
tekrar madde madde yazarmısınızı lütfen hocam
ayrıca dosya 5 sekmeden oluşuyo
ilk 3 sekme varken bu uyarı yoktu son eklediğim (taşı-kopyala diğer dosya) 2 sekmede eklediğimde bu ad çakışması olmuştu
ben hangi sekme açıkken nasıl yapacağım bilemiyorum.
 
merhaba

örnek dosyada kırmızı sekme renkli sayfada bir ad tanımlanmıştır.
bu sayfayı; kopyala- sona kopya oluştur derseniz ad çakışması uyarısı alırsınız.
diğer sayfalarda bu ad olduğu halde çakışma olmaz.

kodu her hangi bir sayfadan çalıştırabilirsiniz, sayfaya bakmaz kitabın içindekilere bakar.
 

Ekli dosyalar

Kod:
Sub IsimleriSil()
    For i = 1 To ActiveWorkbook.Names.Count
        ActiveWorkbook.Names.Item(i).Delete
    Next
End Sub

Sayın hamitcan hocam
Sadece aşağıdaki adları otomatik silmek için nasıl bir kod yazabiliriz?
DışVeri_1
DışVeri_1
DışVeri_2
DışVeri_3
DışVeri_4

yardımcı olabilirmisiniz acaba?
 
Böyle deneyin.
Kod:
Sub IsimleriSil()
    ActiveWorkbook.Names("DışVeri_1").Delete
    ActiveWorkbook.Names("DışVeri_2").Delete
    MsgBox "Adlar Silindi"
End Sub
 
Sayın hamitcan hocam
Sadece aşağıdaki adları otomatik silmek için nasıl bir kod yazabiliriz?
DışVeri_1
DışVeri_1
DışVeri_2
DışVeri_3
DışVeri_4

yardımcı olabilirmisiniz acaba?

DışVeri_1
DışVeri_1
DışVeri_2
DışVeri_3
DışVeri_4

Veya İngilizce:

ExternalData_1
ExternalData_2
ExternalData_3
ExternalData_4

şeklinde Webten Dış Veri Al yönteminde her alışta veya güncellemede, Excel yukarıda belirtildiği şekilde otomatik olarak tanımlanmış alan adları yaratır.

Bunları tek tek silinme yoluna gidilebilir.

Makro kaydet ile elde edeceğimiz aşağıdaki gibi kodlar:

Kod:
Sub IsimleriSil()
    ActiveWorkbook.Names("DışVeri_1").Delete
    ActiveWorkbook.Names("DışVeri_2").Delete
    MsgBox "Adlar Silindi"
End Sub

1 ve 2 yerine döngü de kullansak bu kodlar çalışmaz. (Yada ben çalıştıramadım.)

Bu alan adlarının arka planda çalışan query'den silmek gerekir. Bu nedenle aşağıdaki kodları kullanmak gerekir.

İki örnek verilmiştir.


Kod:
Sub disvalnsil()

For Each Syf In Worksheets
For Each qt In Syf.QueryTables
qt.Delete
Next
Next

End Sub


Kod:
Sub Bagalnsil()

Dim Syf As Worksheet, bag As Object
Dim xbag As Object


For Each xbag In ActiveWorkbook.Connections
If UCase(xbag.Name) Like "*" Then xbag.Delete
Next xbag

For Each Syf In ActiveWorkbook.Worksheets
For Each xbag In Syf.Names
xbag.Delete
Next xbag
Next Syf

End Sub

Denemeyi aşağıdaki dosyada yapıp sonucu görebilirsiniz.

http://www.excel.web.tr/attachment.php?attachmentid=131416&d=1335770665

.
 
Merhaba

Hatalı adların silinmesiyle ilgili bir şey dikkatimi çekti,
3 nolu mesajda önerdiğim kodu kullandığımda seçime bağlı olarak istediğimiz adları silebiliyoruz.
Kod:
Sub T_Ad_Sil()
On Error GoTo 10
Dim ONAY As Byte
For Each adlar In ThisWorkbook.Names
    ONAY = MsgBox(adlar.Name & vbCrLf & adlar & vbCrLf & vbCrLf & _
    "Tanımlı Ad Silinsin mi?", vbInformation + vbYesNo)
    
    If ONAY = vbYes Then
        adlar.Delete
    ElseIf ONAY = vbNo Then
    End If
10:
    Next
End Sub

.xls dosyası excel2007 ve üstü sürümlerle kullanıldığında EĞERHATA (IFERROR) fonksiyonu kullanıldığını farz edelim.
Bu dosya excel2003 ile açıldığında _xlfn.IFERROR hatası verecektir.
Nasıl oluyor bilmem, bu hata dosya içerisinde yapışıp kalıyor.
Ya da bu hücre ad tanımlama ile tanımlanmışsa yapışkan hale geliyor olabilir, emin değilim.

Fonksiyon hatayı giderip dosyayı kullanabiliyoruz. Ancak dikkatimi çeken şu oldu.
_xlfn.IFERROR hatalı adı, ad yöneticisinde görülmezken yukarıda verdiğim kod ile görülebiliyor ancak silinemiyor.
Dosyayı .xlsx veya .xlsm formatından .xls formatına dönüştürerek kod çalıştırılırsa hatalı ad siliniyor.

Ek dosyada bunu görebilirsiniz.
 

Ekli dosyalar

Galiba sayfa isimleri eklenince, siliniyor.
Kod:
ActiveWorkbook.Names("veri!DışVeri_1").Delete
Bu arada döngü kullanımı ile ilgili bir örnek de konu içinde olmalı. Döngüyü de sayfa ismini kullanarak oluşturursak tamamını silebilir diye düşünüyorum.
 
Sayın uzmanamele ellerinize sağlık.Büyük bi derten kurtardın.
 
merhabalar,

Bu kodu çalıştırdığımızda herhangibir sayfayı bir kez kopyalama işlemi yaptığımda sorun görünmüyor. Fakat Kopyalanan sayfayı tekrar kopyaladığımızda aynı hata devam ediyor.Çözüm öneriniz nedir?

Teşekkür ederim.Saygılarımla
 
merhaba

hatalı tanımlı adların bulunduğu dosyada bunları temizlemek bazen sorun olur.
kod ile tanımlı ad silindiğinde silinmesini istemediğimiz tanımlı adlar olabilir.
alternatif kod.
Kod:
Sub T_Ad_Sil()
Dim ONAY As Byte
For Each adlar In ThisWorkbook.Names
    ONAY = MsgBox(adlar & vbCrLf & vbCrLf & _
    "Tanımlı Ad Silinsin mi?", vbInformation + vbYesNo)
   
    If ONAY = vbYes Then
        adlar.Delete
    ElseIf ONAY = vbNo Then
    End If
    Next
End Sub

Faydalı paylaşım için teşekkür ederim.
 
Geri
Üst