• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Çözüldü listboxdaki seçili satır kaydırarak silme sorunu

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

Discreum

Yeni Üye
Katılım
21 Mar 2021
Mesajlar
152
Aldığı beğeni
37
Excel V
Office 2019 TR
Konu Sahibi
Adsız.jpg

HTML:
PHP:
İçeriği görebilmek için Giriş yap ya da Üye ol.

Herkeze merhaba ben bu kodlamada bi hata almıyorum ama sorunum şu istediğim satırı seçip sil dediğim zaman bazen seçtiğim satırın üstündeki satırı siliyor ben sorunun içinden çıkamadım şimdiden teşekkür ederim.
 
Sayın Discreum olası hataları biliyorsanız
ve bunların tolere edilebilir hatalar olduğunu düşünüyorsanız
On Error Resume Next kullanın. Bu kod tolere edilebilir hata
kombinasyonları için iyi.

Selected_Row = Application.WorksheetFunction.Match(Me.ListBox1.List(Me.ListBox1.ListIndex, 0), sh.Range("A:A"), 0)

bu kodla tekrar eden verilerin ilkini bulursunuz. Sanırım sıkıntı da bu. Siz üçüncüsünü silmek istersiniz
ama ilkini bulur ve siler. Görüntüye bakılırsa da seçim sütunu tarih ve tekrarlı.
Çözmek için bir iki yöntem önerilebilir. Row.Source ile yüklüyorsanız index nodan bir çözüm üretilebilir.
Sorgulama sonucu yüklenmiş bir listbox ise döngüye girip halledilebilir.
Ya da listboxda benzersiz değer taşıyan bir sütundan hareketle Find işlevi kullanılabilir.
Bütün bunları kendiniz çözemeyecekseniz dosyanızı eklemeniz daha iyi.
ListBox1 in nasıl yüklendiği önemli.
 
1. satırda sütun başlıkları olduğunu varsaydım.
Me ' nin UserForm1 olduğunu varsaydım. Form adı neyse onu yazın.
döngüyle şöyle olabilir. Kafadan yazınca yazım hataları olabilir.
Amaç döngüyle nasıl olabileceğine dair bir fikir verebilmek.

For i = 2 To sh..Cells(Rows.Count, "A").End(3).Row

If sh.Cells(i , 1) = UserForm1.ListBox1.List(UserForm1.ListBox1.ListIndex, 0) Then
If sh.Cells(i , 2) = UserForm1.ListBox1.List(UserForm1.ListBox1.ListIndex, 1) Then

Selected_Row = i

Exit For

End If
End If

Next

sh.Range("A" & Selected_Row).EntireRow.Delete

Ben şartları kısa kestim. Yeterli değilse siz çoğaltabilirsiniz.
 
Konu Sahibi
Sayın Discreum olası hataları biliyorsanız
ve bunların tolere edilebilir hatalar olduğunu düşünüyorsanız
On Error Resume Next kullanın. Bu kod tolere edilebilir hata
kombinasyonları için iyi.

Selected_Row = Application.WorksheetFunction.Match(Me.ListBox1.List(Me.ListBox1.ListIndex, 0), sh.Range("A:A"), 0)

bu kodla tekrar eden verilerin ilkini bulursunuz. Sanırım sıkıntı da bu. Siz üçüncüsünü silmek istersiniz
ama ilkini bulur ve siler. Görüntüye bakılırsa da seçim sütunu tarih ve tekrarlı.
Çözmek için bir iki yöntem önerilebilir. Row.Source ile yüklüyorsanız index nodan bir çözüm üretilebilir.
Sorgulama sonucu yüklenmiş bir listbox ise döngüye girip halledilebilir.
Ya da listboxda benzersiz değer taşıyan bir sütundan hareketle Find işlevi kullanılabilir.
Bütün bunları kendiniz çözemeyecekseniz dosyanızı eklemeniz daha iyi.
ListBox1 in nasıl yüklendiği önemli.
peki burda
Selected_Row = Application.WorksheetFunction.Match(Me.ListBox1.List(Me.ListBox1.ListIndex, 0), sh.Range("A:A"), 0)

sh.Range("A" & Selected_Row).EntireRow.Delete a sütunu yerine başka herhangi bir sütun üzerinden silme işlemi yapabilirmiyiz benzer veriler olmadıkça kaymaz yapmaz diye düşünüyorum
 
yukardaki resme göre bu kodla sağlıklı işlem yapamazsınız. yukardaki yazmış olduğum
kod örneğini denediniz mi ?

Sorunuza gelince cümleyi bölerek anlatayım.

Selected_Row = Application.WorksheetFunction.Match(Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
bu kısım listboxdaki ilk sütun. sayfanızda A sütunu. 0 ı 1 yaparsanız arama kriteriniz
sayfanızdaki DEFTER sütununda olur. Artık kaçıncı sütundaysa. Kısaca bu kısım arama kriteriniz.

Nerde arayacaksınız ?
sh.Range("A:A"), 0) bu kısımda yazan adresde.
A:A yazan yeri sayfanızda arama kriterinize göre hangi sütunda
arama yapacaksanız onu yazacaksınız. Varsayalım ki DEFTER yazan
sütun B sütunu. O zaman kod cümleciği şöyle olacak : sh.Range("B:B"), 0)
listebox1 de DEFTER başlığına göre bütün kod ise şöyle.
Selected_Row = Application.WorksheetFunction.Match(Me.ListBox1.List(Me.ListBox1.ListIndex, 1), sh.Range("B:B"), 0)

Tekrarlamakta fayda var. Bu kodla çalışmanızın kontrolünü sağlamakta
epeyce sıkıntı çekersiniz.
 
Merhaba.
Bence listboxta sıra no sütun olmadığı için böyle.Listboxta süzme yapmıyorsanız bence Mach buna gerek yok.
 
İkinci satırdan başlıyorsa ve listboxta süzme yapılmıyorsa alttaki gibi çalışması gerek ama yanlış yazmış olabilirim denemedim.

HTML:
Rich (BB code):
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Konu Sahibi
İkinci satırdan başlıyorsa ve listboxta süzme yapılmıyorsa alttaki gibi çalışması gerek ama yanlış yazmış olabilirim denemedim.

HTML:
Rich (BB code):
İçeriği görebilmek için Giriş yap ya da Üye ol.
BNEDE HER TÜRLÜ DENEMEYİ YAPIYORUM AMA daha bulamadım bizin gönderdiğiniz kod gene aynı şekilde sorun veriyo
 
Sayın Discreum yazdığınız deneme kodlarını buraya yazar mısınız ?
sh.Range("A" & Me.Listbox1.listindex +1).EntireRow.Delete

bu kodla da sıkıntı yaşarsınız. Atıyorum sayfanızdaki veriler 5. satırdan başlasın. Ve siz Row.Sorce yöntemiyle
listbox1 i doldurmuş olun. Bu durumda +1 ile silemezsiniz. Siz dosyanızı ekleyin yada deneme kodlarınızı.

 
Sayın Refaz
ColumnHeads = True sadece RowSource yöntemi için geçerli.
ve sayfanın 1.satırını referans alıyor. Mesela veri seti
ilk 4 satır boş olmak kaydıyla 5. satırdan
başlayıp RowSource yöntemiyle yüklenmişse başlık kısmı boş kalıyor.
O zaman +5 varsa başlıklara yoksa ilk satıra tekabül eder.

Eğer resme bakarsak 1 satırda başlık var. 2 satırdan da almış.
Arada boşluk falan görünmüyor.
burda püf noktası şu: ListBox da ilk satır 0 ama sayfada 2. satır olur.
1. satırda sütün başlıkları var.

Burada True belli. O zaman sizin kodunuzda +2 olacak.
sh.Range("A" & Me.Listbox1.listindex +2).EntireRow.Delete
biçiminde. Eğer doğru yüklenmişse bu kodun doğru çalışması lazım.

Bu vesileyle ben de listbox yükleme yöntemlerine ilişkin
bir dosyayı paylaşmış olayım. Muhtemelen de soru çözülmüş
olacak.
 
Konu Sahibi
İşyerine gittiğimde kodlamayi excel formatında atıcam saolun dün akşam erken yattım mesajlarınızı yeni goruyorum
 
Konu Sahibi
pardon çalışma sayfası olarak atmamışım o yüzden formlar ekli değildi bu formlu hali
 
Sayın Discreum dosyanızda seri no sütunu benzermiş.
Ardışık sayı gidiyor.
Selected_Row = sh.Range("A" & Me.ListBox1.ListIndex + 2).EntireRow.Delete
satırını ekledim. Sizin silme kodunuzu pasif yaptım. G sütununda çalışır o kod.
Şöyle olacak artık :
Selected_Row = Application.WorksheetFunction.Match(Me.ListBox1.List(Me.ListBox1.ListIndex, 0), sh.Range("G:G"), 0)

Ben dosyanızda 1. ve 10. satırları sildim bilginize.
Şimdi burda bir soru daha ortaya çıkıyor.
Silme işleminden sonra G sütununda ardışık sayı düzeni bozulacak.
Silindiği kadar sayılarda atlama olacak. Silindikten sonra yeniden
sayılar düzenlenecek mi ? Yani 1 den son satıra kadar yeniden yazılacak mı ?
 
Konu Sahibi
sayılaın otomatik olarak silindikten sonra ardışık olarak devam etmesi gerek yani daha iyi olurdu :)
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst