Excel Vbaworksheet function sınıfının match özelliği hatası

Katılım
7 Aralık 2013
Mesajlar
3
Excel Vers. ve Dili
excel 2007
Merhabalar,
Aşağıdaki programda Kaydet butonuna bastığımda WorksheetFunction.Match hatası alıyorum. Çözüm için yardımcı olur musunuz?

Option Explicit
Dim wsTeklifler, wsTeklifKodları, wsFirmalar, wsTemsilciler, wsÜrünler, wsÜrünKullanımları, wsÖrnek As Worksheet
Dim SonSatır, KayıtSatırı, Mesaj As Variant

Private Sub Cmd1_Kaydet_Click()

If TB1_ÜrünAdı = "" Then
BilgiMesajı ("Ürün Adı Boş Geçilemez")
Exit Sub
End If

On Error Resume Next
KayıtSatırı = WorksheetFunction.Match(TB1_ÜrünAdı, wsÜrünler, Range("A:A"), 0)

If Err.Number > 0 Then
Err.Number = 0
KayıtSatırı = WorksheetFunction.CountA(wsÜrünler.Range("A:A")) + 1
Mesaj = "Yeni Kayıt Yapıldı"
Else
Mesaj = TB1_ÜrünAdı & vbNewLine & "Kaydı Değiştirildi"
End If

wsÜrünler.Cells(KayıtSatırı, 1) = TB1_ÜrünAdı
wsÜrünler.Cells(KayıtSatırı, "B") = SayıKontrol(TB1_ÜrünAdı)
wsÜrünler.Cells(KayıtSatırı, 3) = SayıKontrol(TB1_KdvOranı)
wsÜrünler.Cells(KayıtSatırı, 4) = SayıKontrol(TB1_AlışFiyatı)

BilgiMesajı (Mesaj)

End Sub

Private Sub UserForm_Initialize()

Set wsTeklifler = Workbooks(ThisWorkbook.Name).Worksheets("Teklifler")
Set wsTeklifKodları = Workbooks(ThisWorkbook.Name).Worksheets("TeklifKodları")
Set wsFirmalar = Workbooks(ThisWorkbook.Name).Worksheets("Firmalar")
Set wsTemsilciler = Workbooks(ThisWorkbook.Name).Worksheets("Temsilciler")
Set wsÜrünler = Workbooks(ThisWorkbook.Name).Worksheets("Ürünler")
Set wsÜrünKullanımları = Workbooks(ThisWorkbook.Name).Worksheets("ÜrünKullanımları")

End Sub
 

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
351
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
16-10-2025
Merhaba dener misiniz?

WorksheetFunction.Match hatası, genellikle aradığınız değerin bulunduğu hücre aralığını doğru belirtmediğinizde veya aradığınız değer listede bulunmadığında ortaya çıkar. Aşağıda sorunuzu çözmek için dikkate almanız gereken bazı noktalar ve düzeltmeler var:

Problemler ve Çözümler
  1. Hücre Aralığını Doğru Belirtme: WorksheetFunction.Match fonksiyonu çağrısında wsÜrünler yerine, ilgili hücre aralığını doğrudan belirtmelisiniz. Şu şekilde değiştirin:
Kod:
KayıtSatırı = WorksheetFunction.Match(TB1_ÜrünAdı, wsÜrünler.Range("A:A"), 0)
  1. Burada wsÜrünler'den aralığı doğrudan kullanıyoruz.
  2. Hata Kontrolü: Hata kontrolü yaparken On Error Resume Next ifadesini kullandığınız için hata mesajını göremiyorsunuz. Bu hatanın nedenini anlamak için bunu geçici olarak kaldırabilirsiniz. Ayrıca, hata oluştuğunda, Err.Clear yerine Err.Number = 0 kullanıyorsunuz; bu da hatayı temizlemiyor. Bunu da göz önünde bulundurun.
  3. Giriş Değerinin Kontrolü: TB1_ÜrünAdı değerinin doğru bir şekilde alındığını ve geçerli bir değer içerdiğini kontrol edin. Eğer bu boşsa veya yanlış bir değer içeriyorsa, Match fonksiyonu hata verecektir.
Güncellenmiş Kod
Aşağıdaki şekilde kodu güncelleyebilirsiniz:

Kod:
Option Explicit
Dim wsTeklifler, wsTeklifKodları, wsFirmalar, wsTemsilciler, wsÜrünler, wsÜrünKullanımları, wsÖrnek As Worksheet
Dim SonSatır, KayıtSatırı As Variant
Dim Mesaj As Variant

Private Sub Cmd1_Kaydet_Click()

    If TB1_ÜrünAdı = "" Then
        BilgiMesajı ("Ürün Adı Boş Geçilemez")
        Exit Sub
    End If

    On Error Resume Next
    KayıtSatırı = WorksheetFunction.Match(TB1_ÜrünAdı, wsÜrünler.Range("A:A"), 0)
    
    If Err.Number <> 0 Then
        KayıtSatırı = WorksheetFunction.CountA(wsÜrünler.Range("A:A")) + 1
        Mesaj = "Yeni Kayıt Yapıldı"
        Err.Clear  ' Hata durumunu temizlemek için
    Else
        Mesaj = TB1_ÜrünAdı & vbNewLine & "Kaydı Değiştirildi"
    End If

    wsÜrünler.Cells(KayıtSatırı, 1) = TB1_ÜrünAdı
    wsÜrünler.Cells(KayıtSatırı, 2) = SayıKontrol(TB1_ÜrünAdı)
    wsÜrünler.Cells(KayıtSatırı, 3) = SayıKontrol(TB1_KdvOranı)
    wsÜrünler.Cells(KayıtSatırı, 4) = SayıKontrol(TB1_AlışFiyatı)

    BilgiMesajı (Mesaj)

End Sub

Private Sub UserForm_Initialize()
    Set wsTeklifler = Workbooks(ThisWorkbook.Name).Worksheets("Teklifler")
    Set wsTeklifKodları = Workbooks(ThisWorkbook.Name).Worksheets("TeklifKodları")
    Set wsFirmalar = Workbooks(ThisWorkbook.Name).Worksheets("Firmalar")
    Set wsTemsilciler = Workbooks(ThisWorkbook.Name).Worksheets("Temsilciler")
    Set wsÜrünler = Workbooks(ThisWorkbook.Name).Worksheets("Ürünler")
    Set wsÜrünKullanımları = Workbooks(ThisWorkbook.Name).Worksheets("ÜrünKullanımları")
End Sub
Ek Kontroller
  • TB1_ÜrünAdı Değeri: Kullanıcının girdiği değerin gerçekten aranan değeri temsil ettiğinden emin olun.
  • Hücrelerde Boşluk: A:A aralığında bazı hücrelerin boş olup olmadığını kontrol edin; boş hücreler de eşleşme sorununa neden olabilir.
Bu güncellemelerle birlikte kodunuzun çalışması gerekiyor.
 
Katılım
7 Aralık 2013
Mesajlar
3
Excel Vers. ve Dili
excel 2007
Merhaba,
Çok teşekkür ederim. Ellerinize sağlık. Sorunsuz çalışıyor.
 

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
351
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
16-10-2025
Rica ederim. Bir beğeninizi alırım artık :)
 
Üst