• DİKKAT

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

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
 
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)
 
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.
 
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.
 
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
 
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.
 
Geri
Üst