Listboxtaki verilerde değişiklik ve silme işlemi yapmak

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selam arkadaşlar,

Ekte yolladığım örnek çalışmamda yapmış olduğum kayıtlarda değişiklik veya silme işlemi yapmak istiyorum. Forumda araştırdım kendime uyarladım fakat yaptığım değişiklikleri kaydedemedim. Listboxta mouse ile seçtiğim kayıdı textboxlara aldırıyorum ve değişiklik yapıp DEÐİÞTİR butonuna tıklayınca bu değişikliği kaydetmesini istiyorum ve yine listboxtan seçmiş olduğum kaydı SİL butonuna bastığımdada silmek istiyorum. Bu konuda yardımlarınızı bekliyorum.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Dosyanızda bazı değişiklikler yaptım ekte inceleyin.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Teşekkür ederim. :hey:
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sn. leventm,

Ekli dosyayı inceledim. Gayet hoş olmuş fakat tüm kayıtları silerken kodlardaki autofill özelliğinden olsa gerek hata veriyor. Tabloyu tamamen boşaltamıyorum. Sadece başlık kalacak şekilde. :hey:
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sil butonundaki kodu aşağıdaki ile değiştirerek deneyin.

[vb:1:cfa591262c]Private Sub CommandButton3_Click()
sat = ListBox1.ListIndex + 2
adr = "a" & sat & ":e" & sat
Range(adr).Delete
Cells([d65536].End(3).Row, "e") = WorksheetFunction.Sum(Range("e2:e" & [d65536].End(3).Row - 1))
If [b3] = 0 Then Exit Sub
[a2] = 1
[a3] = 2
sonsat = [B65536].End(3).Row
Range("a2:a3").AutoFill Destination:=Range("a2:a" & sonsat)
End Sub[/vb:1:cfa591262c]
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Teşekkür ederim. :hey:
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sn. leventm,

Sizin verdiğiniz kodlarda ufak değişiklik yapmaya çalışıyorum fakat başarılı olamadım. Kodları aşağıdaki şekilde düzenledim.

1. KAYDET KODU
Private Sub CommandButton1_Click()
If TextBox1.Value = "" Or TextBox2.Value = "" Or TextBox3.Value = "" Or TextBox4.Value = "" Then
MsgBox ("Kayıt işlemi için gerekli tüm bölümlere veri girmelisiniz." _
& Chr(10) & "Lütfen boş bıraktığınız bölümleri doldurunuz."), vbExclamation, "DİKKAT !"
TextBox1.SetFocus

Else

Sheets("GIDA").Select
Range("A2").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select

Loop

If Range("A2").Value = "" Then
Range("A2").Value = 1
Range("A2").Select

Else

ActiveCell.Value = ActiveCell.Offset(-1, 0).Value + 1

End If

ActiveCell.Offset(0, 1) = CDate(TextBox1.Text)
ActiveCell.Offset(0, 2) = TextBox2.Text
ActiveCell.Offset(0, 3) = TextBox3.Text
ActiveCell.Offset(0, 4) = TextBox4.Text

Range("B2").Select
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox1.SetFocus

Call Userform_initialize
ActiveWorkbook.Save
End If
End Sub

2. DEÐİÞTİR KODU
Private Sub CommandButton2_Click()
Satır = ListBox1.ListIndex + 2
Sonsatır = [D65536].End(3).Row + 2
For a = 2 To 5
Cells(Sonsatır, a) = Controls("Textbox" & a)
Next
For b = 2 To 5
Cells(Satır, b) = Cells(Sonsatır, b)
If b = 5 Then Cells(Satır, b) = Cells(Sonsatır, b) * 1
Cells(Sonsatır, b).ClearContents
Next
End Sub

Bu 2. kodda 2 To 5 bölümünü 1 To 4 yapıyorum bu seferde düzeltme işlemini 1 hücre sola kaydırarak yapıyor. Bu kodu nasıl düzenleyebiliriz. (Zahmet olmazsa kodun mantığınıda açıklayabilirmisiniz.) :hey:
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selam arkadaşlar kodla ilgili yardımlarınızı bekliyorum... :yardim:
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selam arkadaşlar kodla ilgili yardımlarınızı bekliyorum... :yardim:
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Aşağıdaki gibi deneyin.

[vb:1:100150f164]Private Sub CommandButton2_Click()
Satır = ListBox1.ListIndex + 2
Sonsatır = [D65536].End(3).Row + 2
For a = 1 To 4
Cells(Sonsatır, a+1) = Controls("Textbox" & a+1)
Next
For b = 1 To 4
Cells(Satır, b+1) = Cells(Sonsatır, b+1)
If b = 5 Then Cells(Satır, b+1) = Cells(Sonsatır, b+1) * 1
Cells(Sonsatır, b+1).ClearContents
Next
End Sub
[/vb:1:100150f164]

Kodun mantığı şöyledir. Textboxlarda değişiklik yapıldıktan sonra veriler birinci döngü ile en alttaki boş hücrelere aktarılır. Sonrada ikinci döngü ile veriler, bu hücrelerden asıl değişikliğin yapılacağı hücrelere aktarılır, ve an alttaki boş hücredeki gereksiz olan veriler tekrar silinir.

Þunu sorabilirsiniz, neden önce veriler en alt satıra kaydedilip sonradan asıl yerine aktarılıyorda direk olarak textboxlardan aktarılmıyor? Sebebini tam olarak bilmesemde sanıyorum listboxa rowsource ile veriler alındığından direk textboxtan kendi rowsource alanına direk aktarmayı kabul etmiyor, bu sebeple veriler önce alan dışına aktarılıp sonradan yerine taşınıyor.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sn. leventm,

Verdiğiniz değerli bilgiler için teşekkür ederim fakat kodda aşağıdaki bölümde hata veriyor.

Cells(Sonsatır, a + 1) = Controls("Textbox" & a + 1)

Could not find the specified object.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Controls("Textbox" & a + 1)

Yukarıdaki satırda hata veriyor, textbox isimleriniz textbox2,textbox3,.......textbox5 şeklinde ritmik gitmelidir.

Eğer textbox1,textbox2,textbox3,textbox4 şeklinde gidiyor ise bu durunda aşağıdaki ile değiştirin.

Controls("Textbox" & a)
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,243
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Teşekkür ederim. :hey:
 
Üst