Veri Doğrulama Hk.

Katılım
14 Haziran 2007
Mesajlar
142
Excel Vers. ve Dili
2007
Merhabalar,

Stok kodları sayfasındaki Malzeme Açıklamasını alfabetik olarak tesis miktar sayfasına veri doğrulama yoluyla almayı başarmıştım.

Ancak yemekten dönüşte bir tülü çalışmamaya başladı.


Hatamı bir türlü bulamadım.

Yardımcı olabilirseniz çok sevinirim.


Sub Veridogrulama()


Dim Dizi As Object, Veri As Range, Son As Long

'On Error Resume Next

Set Dizi = CreateObject("System.Collections.ArrayList")
Son = Cells(Rows.Count, 3).End(3).Row
For Each Veri In Range("C2:C" & Son)
If Dizi.Contains(UCase(Replace(Replace(Veri.Value, "i", "I"), "i", "I"))) = False Then
Dizi.Add UCase(Replace(Replace(Veri.Value, "i", "I"), "i", "I"))
End If
Next
Dizi.Sort
With Range("D2:D110")
.Validation.Delete
.Validation.Add Type:=xlValidateList, Formula1:=Join(Dizi.ToArray, ",") ---bu bölümde takılıyor---
End With

End Sub


http://www.dosya.tc/server7/nfrcbi/tesis_butce_miktar_sayfasi.xls.html
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,647
Excel Vers. ve Dili
Pro Plus 2021
Kod:
    Son = [COLOR="Red"]Sheets("Stok_kodlari").[/COLOR]Cells(Rows.Count, 3).End(3).Row
    For Each Veri In [COLOR="red"]Sheets("Stok_kodlari").[/COLOR]Range("C2:C" & Son)
 
Katılım
14 Haziran 2007
Mesajlar
142
Excel Vers. ve Dili
2007
Kod:
    Son = [COLOR="Red"]Sheets("Stok_kodlari").[/COLOR]Cells(Rows.Count, 3).End(3).Row
    For Each Veri In [COLOR="red"]Sheets("Stok_kodlari").[/COLOR]Range("C2:C" & Son)

Hocam çok teşekkür ederim.

Son = sayfa2.Cells(Rows.Count, 3).End(3).Row
For Each Veri In sayfa2.Range("C2:C" & Son)

diye yazmıştım ama gene çalışmamıştı.

Demek işin kerameti Sheets("Stok_kodlari") şeklinde yazmakmış.

Tekrardan teşekkür ederim.
 
Katılım
14 Haziran 2007
Mesajlar
142
Excel Vers. ve Dili
2007
Kod:
    Son = [COLOR="Red"]Sheets("Stok_kodlari").[/COLOR]Cells(Rows.Count, 3).End(3).Row
    For Each Veri In [COLOR="red"]Sheets("Stok_kodlari").[/COLOR]Range("C2:C" & Son)
Hocam yapmış olduğumuz bu kodlama 400 üncü satırdan sonra veri olursa

Application-defined or object-defined error

hatası vermekte.

Benim listemin uzunluğu da yaklaşık 1 000 satır civarı.

Bunu nasıl çözüme ulaştıra bilirim? Çünkü kodun hiç bir yerinde satır kısıtı yok.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,647
Excel Vers. ve Dili
Pro Plus 2021
Benim listemin uzunluğu da yaklaşık 1 000 satır civarı.

Bunu nasıl çözüme ulaştıra bilirim? Çünkü kodun hiç bir yerinde satır kısıtı yok.
Yanlış, Join(Dizi.ToArray, ",") kısmında oluşan string ifadenin sınırı var.

Aşağıdaki gibi diziyi sayfaya ekleyip, ondan sonra veri doğrulamaya ekleyin. Belki başka çözümlerde vardır.

Kod:
Sub Veridogrulama()
    Dim Dizi As Object, Veri As Range, Son As Long
    Set Dizi = CreateObject("System.Collections.ArrayList")
    Son = Sheets("Stok_kodlari").Cells(Rows.Count, 3).End(3).Row
    For Each Veri In Sheets("Stok_kodlari").Range("C2:C" & Son)
        If Dizi.Contains(UCase(Replace(Replace(Veri.Value, "i", "I"), "i", "I"))) = False Then
            Dizi.Add UCase(Replace(Replace(Veri.Value, "i", "I"), "i", "I"))
        End If
    Next
    
    Dizi.Sort
    Sheets("Stok_kodlari").[J:J].ClearContents
    liste = Dizi.ToArray
    Sheets("Stok_kodlari").[J1].Resize(UBound(liste) + 1, 1).Value = Application.Transpose(liste)
    ActiveWorkbook.Names.Add Name:="list", RefersToR1C1:="=Stok_kodlari!R1C10:R" & UBound(liste) + 1 & "C10"

    With Range("D2:D110")
        .Validation.Delete
        .Validation.Add Type:=xlValidateList, Formula1:="=List"
    End With
End Sub
 
Katılım
14 Haziran 2007
Mesajlar
142
Excel Vers. ve Dili
2007
Yanlış, Join(Dizi.ToArray, ",") kısmında oluşan string ifadenin sınırı var.

Aşağıdaki gibi diziyi sayfaya ekleyip, ondan sonra veri doğrulamaya ekleyin. Belki başka çözümlerde vardır.

Kod:
Sub Veridogrulama()
    Dim Dizi As Object, Veri As Range, Son As Long
    Set Dizi = CreateObject("System.Collections.ArrayList")
    Son = Sheets("Stok_kodlari").Cells(Rows.Count, 3).End(3).Row
    For Each Veri In Sheets("Stok_kodlari").Range("C2:C" & Son)
        If Dizi.Contains(UCase(Replace(Replace(Veri.Value, "i", "I"), "i", "I"))) = False Then
            Dizi.Add UCase(Replace(Replace(Veri.Value, "i", "I"), "i", "I"))
        End If
    Next
    
    Dizi.Sort
    Sheets("Stok_kodlari").[J:J].ClearContents
    liste = Dizi.ToArray
    Sheets("Stok_kodlari").[J1].Resize(UBound(liste) + 1, 1).Value = Application.Transpose(liste)
    ActiveWorkbook.Names.Add Name:="list", RefersToR1C1:="=Stok_kodlari!R1C10:R" & UBound(liste) + 1 & "C10"

    With Range("D2:D110")
        .Validation.Delete
        .Validation.Add Type:=xlValidateList, Formula1:="=List"
    End With
End Sub

Ustam yardımın için çok teşekkür ederim.

Daha sizin kadar deneyim ve tecrübe sahibi olmadığım için

"Join(Dizi.ToArray, ",") kısmında oluşan string ifadenin sınırı var."

tam olarak neyi sınırladığını bilmiyordum.

Kod içinde sürekli rakam bakıyordum :)

Tekrardan çok teşekkür ederim.
 
Üst