Names

Katılım
30 Haziran 2005
Mesajlar
149
Merhaba,

Soyle bir kod yarattim


Kod:
Sub ListInitializer() 
    Dim Source As Worksheet 
    Dim LastRow As Long 
    On Error GoTo SourceListNotFound 
    Set Source = Worksheets("SourceList") 
    On Error GoTo 0 
    Dim myLastRow As Long 
    
    LastRow = Source.Range("a65536").End(xlUp).Row 
    ActiveWorkbook.Names.Add Name:="HamList", RefersToR1C1:="=SourceList!R1C1:R" & LastRow & "C1" 
    myLastRow = Source.Range("c65536").End(xlUp).Row 
    ActiveWorkbook.Names.Add Name:="AmbList", RefersToR1C1:="=SourceList!R1C3:R" & myLastRow & "C3" 
    LastRow = Source.Range("e65536").End(xlUp).Row 
    ActiveWorkbook.Names.Add Name:="EbatList", RefersToR1C1:="=SourceList!R1C5:R" & LastRow & "C5" 
    LastRow = Source.Range("g65536").End(xlUp).Row 
    ActiveWorkbook.Names.Add Name:="KutuList", RefersToR1C1:="=SourceList!R1C7:R" & LastRow & "C7" 
    
    
    
Exit Sub 
SourceListNotFound: 
    MsgBox "SourceList doesn't exist" 
Exit Sub 
End Sub


Bu kod 4 farkli alanda 4 "Name" yaratiyo. fakat "Name Box" tan bu isimleri sectigim zaman herseferinde farkli hucreler gosteriyor. Kodda bir yanlislikmi var? Bunu nasil duzeltebilirim?

PS: Bu kod Workbook_open tarafindan cagriliyor
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Merhaba;

Asagidaki kod parcasini, kodun basina eklerseniz istediginiz olucak gibi geliyor ....

Yani once tanimlanmis alan adlarini silicek, daha sonra mevcut duruma gore yeniden adlandirsacaksiniz.

Bence bir deneyin.

Kod:
With ActiveWorkbook
    .Names("AmbList").Delete
    .Names("EbatList").Delete
    .Names("HamList").Delete
    .Names("KutuList").Delete
End With
 
Katılım
8 Haziran 2005
Mesajlar
114
Ben üzerinde çalışırken sayın Raider cevaplamış bile :)

Emeğim boşa gitmesin ne dersiniz? (Kodları kendinize uyarlayabilirsiniz, ben size iki örnek hazırlamıştım.)

Kod:
Sub Adlandir()
  With ActiveWorkbook
    .Names("HamList").Delete
    .Names("AmbList").Delete
  End With
  On Error Resume Next
  With Sheets("SourceList")
    .Range("A1:A" & [A65536].End(3).Row).Name = "HamList"
    .Range("C1:C" & [C65536].End(3).Row).Name = "AmbList"
  End With
End Sub
 
Katılım
30 Haziran 2005
Mesajlar
149
Supersiniz arkadaslar,
Ikinizede tesekurler, elinize saglik

Yalniz visualBasic arkadasin kodu dikkatimi cektide "End"den sonra gelen 3'un anlami nedir?
 
Katılım
30 Haziran 2005
Mesajlar
149
Hazir yolun yarisina gelmisken size bi sorum daha olacak... yukarda gordugunuz kodda AmbList "SourceList" sayfasinin C kolonuna, KutuList'te G kolonuna denk geliyor.

Benim yapmak istedigimse bu iki AD altinda kalan butun verileri "I" kolonuna kopyalayip KutuAmbList Adi vermek.

Bu yapilabilirmi? (daha dogrusu nasil yapilir :kafa: )
 
Katılım
8 Haziran 2005
Mesajlar
114
Rica ediyorum, iltifatlarınız içn çok teşekkür ederim


Supersiniz arkadaslar,
Ancak kendi adıma söylüyorum; Henüz süper olamadık, İnşaallah hepimiz bir gün düşündüğünüz gibi süper oluruz. :hey:

Yalnız, bahsettiğiniz manada süperlik elde ettiğimizde Allah (C.C.) hepimizi kibirden gururlanmaktan korusun, en büyük korkum kibirdir. :arkadas:

[A65536].End(3)

Excel abinin A65536'ıncı satırına in, sonra en üste çık veri girilen ilk satırda dur.

Bu durumda diyebilirsiniz ki, taa en sona niye indik ki?
Cevap: Verileriniz arasında boşluklar olabilir, bide boşluk olsa bile en son satırı bulmuş olduk. :arkadas:
 
Katılım
8 Haziran 2005
Mesajlar
114
Kod:
Sub abcd()
  On Error Resume Next
  ActiveWorkbook.Names("KutuAmbList").Delete
  Columns("I").ClearContents
  Range("AmbList").Copy Destination:=Range("I1")
  Range("KutuList").Copy Destination:=Range("I" & [I65536].End(3).Row + 1)
  Range("I1:I" & [I65536].End(3).Row).Name = "KutuAmbList"
End Sub
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,646
Excel Vers. ve Dili
Pro Plus 2021
sayın VisualBasic'in [I65536].End(3).Row kullanımını gördükten sonra
end komutuyla ilgili birkaç deneme yaptım.
 
Katılım
8 Haziran 2005
Mesajlar
114
veyselemre' Alıntı:
sayın VisualBasic'in [I65536].End(3).Row kullanımını gördükten sonra
end komutuyla ilgili birkaç deneme yaptım.
Ellerinize sağlık, olay budur işte.

End(1,2,3,4) yön tuşlarını ifade etmektedir. :hey:
 
Katılım
30 Haziran 2005
Mesajlar
149
Selamlar,

Yardimlarinizla VB kodda ilerleme kaydettim, hepinize tesekurler. Simdilik kod'um soyle bir sey oldu:

Kod:
Sub ListInitializer()
    Dim Source As Worksheet
    Dim LastRow As Long
    On Error GoTo SourceListNotFound
    Set Source = Worksheets("SourceList")
    On Error GoTo 0
    Dim myLastRow As Long
    
'Var olan Name'leri sil
    On Error Resume Next
    With ActiveWorkbook
        .Names("AmbList").Delete
        .Names("EbatList").Delete
        .Names("HamList").Delete
        .Names("KutuList").Delete
        .Names("KutAmList").Delete
    End With
    On Error GoTo 0
    
'HamList, AmbList, EbatList, KutuList yarat
    LastRow = Source.Range("a65536").End(xlUp).Row
    ActiveWorkbook.Names.Add Name:="HamList", RefersToR1C1:="=SourceList!R1C1:R" & LastRow & "C1"
    LastRow = Source.Range("c65536").End(xlUp).Row
    ActiveWorkbook.Names.Add Name:="AmbList", RefersToR1C1:="=SourceList!R1C3:R" & LastRow & "C3"
    LastRow = Source.Range("e65536").End(xlUp).Row
    ActiveWorkbook.Names.Add Name:="EbatList", RefersToR1C1:="=SourceList!R1C5:R" & LastRow & "C5"
    LastRow = Source.Range("g65536").End(xlUp).Row
    ActiveWorkbook.Names.Add Name:="KutuList", RefersToR1C1:="=SourceList!R1C7:R" & LastRow & "C7"
    
'KutuAmbList gerekli data transfer
    On Error Resume Next
    Source.Columns("I").ClearContents
    Range("AmbList").Copy Destination:=Source.Range("I1")
    Range("KutuList").Copy Destination:=Source.Range("I" & [I65536].End(3).Row + 1)
'KutuAmbList Name yarat
    Source.Range("I1:I" & [I65536].End(3).Row).Name = "KutuAmbList"
    
Exit Sub
SourceListNotFound:
    MsgBox "SourceList adli sayfa bulunamamistir, sayfanin adinin degistirilmediginden emin olun"
Exit Sub
End Sub
Fakat "I" kolonuna Iki alani kopyalarken soyle bir hata olusuyor: Once "AmbList I1'den baslayarak kopyaliyor sonra "KutuList"i I2'den baslayarak. Ayrica sadece I1 hucresi "KutuAmbList" adini aliyor.

kolonlar kopyalanirken yapilan hata konusunda fikir versin diye "SourceList" sayfasini buraya ekliyorum.

Yardimlarinizi bekliyorum,

Tesekurler
 
Katılım
30 Haziran 2005
Mesajlar
149
Ne yapsam olmuyo cildiracam... ustelik bu "Name"lerin tek kolon secmesi gerekirken birden fazla kolon secme olayi devam ediyor :kafa:

YARDIIIM Lutfen :(
 
Katılım
8 Haziran 2005
Mesajlar
114
iggydarsa' Alıntı:
Ne yapsam olmuyo cildiracam... ustelik bu "Name"lerin tek kolon secmesi gerekirken birden fazla kolon secme olayi devam ediyor :kafa:

YARDIIIM Lutfen :(
Sayın iggydarsa; yukarıda sunulan çözümleri bir bir uyguladığınızda çözüme ulaşabileceksiniz. Dün sorunuzu denedim, sunduğumuz çözümler ile cevabınıza ulaşabileceksiniz, ancak sunulan çözümler ile kodlarınızda farklılıklar görülmekte. Tam olarak sorularınızı hatırlamıyorum, sorunuza sonradan eklemeler de yapılmıştı. Rica etsem madddeler halinde bütün ifade edecek şekilde bridaha sorabilirminiz?
 
Katılım
30 Haziran 2005
Mesajlar
149
Tekrar selam,

Su andaki durumumu soyle anlatayim:

Su anda asagidaki kodu kullaniyorum
Kod:
Sub ListInitializer() 
    Dim Source As Worksheet 
    Dim LastRow As Long 
    On Error GoTo SourceListNotFound 
    Set Source = Worksheets("SourceList") 
    On Error GoTo 0 
    Dim myLastRow As Long 
    
'Var olan Name'leri sil 
    On Error Resume Next 
    With ActiveWorkbook 
        .Names("AmbList").Delete 
        .Names("EbatList").Delete 
        .Names("HamList").Delete 
        .Names("KutuList").Delete 
        .Names("KutAmList").Delete 
    End With 
    On Error GoTo 0 
    
'HamList, AmbList, EbatList, KutuList yarat 
    LastRow = Source.Range("a65536").End(xlUp).Row 
    ActiveWorkbook.Names.Add Name:="HamList", RefersToR1C1:="=SourceList!R1C1:R" & LastRow & "C1" 
    LastRow = Source.Range("c65536").End(xlUp).Row 
    ActiveWorkbook.Names.Add Name:="AmbList", RefersToR1C1:="=SourceList!R1C3:R" & LastRow & "C3" 
    LastRow = Source.Range("e65536").End(xlUp).Row 
    ActiveWorkbook.Names.Add Name:="EbatList", RefersToR1C1:="=SourceList!R1C5:R" & LastRow & "C5" 
    LastRow = Source.Range("g65536").End(xlUp).Row 
    ActiveWorkbook.Names.Add Name:="KutuList", RefersToR1C1:="=SourceList!R1C7:R" & LastRow & "C7" 
    
'KutuAmbList gerekli data transfer 
    On Error Resume Next 
    Source.Columns("I").ClearContents 
    Range("AmbList").Copy Destination:=Source.Range("I1") 
    Range("KutuList").Copy Destination:=Source.Range("I" & [I65536].End(3).Row + 1) 
'KutuAmbList Name yarat 
    Source.Range("I1:I" & [I65536].End(3).Row).Name = "KutuAmbList" 
    
Exit Sub 
SourceListNotFound: 
    MsgBox "SourceList adli sayfa bulunamamistir, sayfanin adinin degistirilmediginden emin olun" 
Exit Sub 
End Sub
Amacim yukarda da anlatmaya calistigim gibi SourceList sayfasinda 5 bolgeyi Adlandirmak. Programimda su anda otomatik makrolarla (Worksheet_Open gibi) ve userformlardan bilgilerle, SourceList'te bilgileri topluyorum. SourceList sayfasinin A kolonunu HamList (Hammadeler icin), C kolonunu AmbList (Ambalajlar icin), E kolonunu EbatList (Kutu Ebatlari icin), G kolonunuda KutuList (Kutunun ozellikleri icin) Adlandirmayi dusunuyorum.
Daha sonra baska sayfalarda hucrelere dropdown kutular koymaya calisiyorum ve icindeki bilgilerin KutuList ve AmbList'ten gelmesini istiyorum. O yuzden once KutuList'le AmbList'i SourceList sayfasinin "I" kolonunda birlestirmeyi dusunuyorum (ve KutuAmbList adini koymayi dusunuyorum). Boylece diger sayfalardaki dropdown kutular icin kaynak olarak KutuAmbList'i gosterebiliyim.

Simdilik yapmak istedigim bu kadar
(yukarda yazdigim kod Workbook_open tarafindan cagriliyor.)


Fakat istediklerim olmuyor, cunku bu hatalar var:
1- Program baslarken "Name Box"tan yukarda yarattigim adlari cagiriyorum ki dogru yerleri secmismi diye kontrol ediyorum ve secilen yerler dogruymus gibi gozukuyor... fakat programi kullandiktan bir 5 dk sonra tekrar kontrol ettigimde dogru sayida satiri ama (1 olmasi gerikerken) 1den fazla kolonu seciyor

2- C kolonundaki AmbList I kolonuna copy/paste oluyor. I kolonunda kopyalanan son satirin altina G kolonundan KutuList transfer edilmesi gerekiyor fakat transfere I2 hucresinden basliyor boylece AmbList'ten kaydedilmis bilgilerin uzerine kopyalaniyor. (Extra bilgi: degerlerin hepsi text, ve hic formul yok)

3- "KutuAmbList" I hucresinde deger olan son hucreye kadarki hucreleri adlandirmasi gerekirken sadece I1 hucresini gosteriyor.

Biliyorum mesajim biraz uzun oldu ama olabildigince detayli bilgi vermeye calistim. Her turlu yardiminiza acigim

Cok tesekur ederim.
 
Katılım
8 Haziran 2005
Mesajlar
114
Rica Ediyorum,
1-) Değişken kullanımı gerekmdikçe kullanmayın
2-) R1C1 başvuru stilini çok zorda kalmadıkça kullanmayınız.
3-) WorkBookOpen, Activate, Deactivate kullanmanız mantıklı change her veri girşinde çalıştığından programı yavaşlatabilir.

Aşağıdaki kodları kullanabilirsiniz.

Kod:
Private Sub Worksheet_Activate()
  AdlandirListeleri
End Sub

Private Sub Worksheet_Deactivate()
  AdlandirListeleri
End Sub

Sub Auto_Open()
  AdlandirListeleri
End Sub


Kod:
Sub AdlandirListeleri()
  
  Dim nme As Name
  For Each nme In Names
    nme.Delete
  Next nme

  With Sheets("SourceList")
    .Range("A1:A" & [A65536].End(3).Row).Name = "HamList"
    .Range("C1:C" & [C65536].End(3).Row).Name = "AmbList"
    .Range("E1:E" & [E65536].End(3).Row).Name = "EbatList"
    .Range("G1:G" & [G65536].End(3).Row).Name = "KutuList"
  End With

  Columns("I").ClearContents
  Range("AmbList").Copy Destination:=Range("I1")
  Range("KutuList").Copy Destination:=Range("I" & [I65536].End(3).Row + 1)
  Range("I1:I" & [I65536].End(3).Row).Name = "KutuAmbList"
  
End Sub

Umarım yardımcı olabilmişimdir. Çalışmalarınızda başarılar dilerim.
 
Katılım
30 Haziran 2005
Mesajlar
149
Tesekurler,
Hemen deniyorum

PS: R1C1 stilini bende pek tutmuyorum fakat "A1" stili de hata verdigi icin deniyim istedim
 
Katılım
30 Haziran 2005
Mesajlar
149
Auto_Open ThisWorkbook'un icinde olmali degilmi? onun yerine Workbook_Open kullansam olur mu?

Ayrica AdlandirListeleri hem worksheet icinde (activate & deactivate) hemde workbookta (Auto_Open) kullanilacagi icin bu kodu her iki tarafada mi yazmaliyim? cunku sadece ThisWorkbook'a yazdigim zaman Worksheet icinden cagrilan AdlandirListeleri kodunu bulamiyor

Saygilar
 
Katılım
30 Haziran 2005
Mesajlar
149
Hem Worksheet hem Workbook icine koydum metodu, simdilik cok guzel calisiyor Allah nazardan saklasin

Eline saglik VisualBasic

Tesekkurler.
 
Katılım
8 Haziran 2005
Mesajlar
114
O kadar çok teşekkür ettinizki, her yerim teşekkür doldu.
Bu nezaketinizden dolayı ben size teşekkür ederim.
 
Üst