UserForm da kaydet butonu ile sayfaya kaydetme?

Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Merhaba.
Ekteki çalışmamda userform üzerinde texbox ve comboboxlarım var. Bunlara girilen değerleri exceldeki (kırmızı) belirlediğim hücrelere kaydetmesini istiyorum. Ben biraz araştırdım ama altından çıkamadım. Bana yol gösterecek bir kod dizi bulabilirsem uğraşmak istiyorum. Burada ilgili hücrelere hangi boxların nereye kaydedileceğini yazdım. her kayıttan sonra yeni bir kaydı alt alta devam etmisini istiyorum.

Saygılarımla.

Not: Bazı örnek çalışmalarda yeşil renk ile hangi kodun ne yaptığı açıklamalı olarak verilmiş. Böyle yol gösterici bir örnek rica edebilir miyim?
 

Ekli dosyalar

Katılım
3 Nisan 2008
Mesajlar
777
Excel Vers. ve Dili
Office 2007 Türkçe
Altın Üyelik Bitiş Tarihi
04-11-2020
Ekteki çalışmanıza başlangıcı yaptım.
Kolay Gelsin
 

Ekli dosyalar

Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
dosyayı açtığımda "Compile Error" veriyor.
"Can't find project or library"
 
Katılım
3 Nisan 2008
Mesajlar
777
Excel Vers. ve Dili
Office 2007 Türkçe
Altın Üyelik Bitiş Tarihi
04-11-2020
Ürün satış formunun kod bölümüne aşağıdaki kodları yapıştırıp eksiklerini tamamlarsınız

Private Sub CommandButton1_Click()
With Sheets("satış")
Satır = .Range("A65536").End(3).Row + 1 ' a sütunundaki son dolu satırı bulup bir sonraki satıra aşağıdaki işlemi yapar
.Cells(Satır, 1) = CDate(TextBox1.Text) 'birinci sütuna Textbox1 tarih formatında yazılır
.Cells(Satır, 3) = TextBox2 ' üçüncü sutuna textbox2 yazar
.Cells(Satır, 4) = TextBox3
.Cells(Satır, 5) = TextBox4
.Cells(Satır, 6) = TextBox5
.Cells(Satır, 7) = TextBox6
.Cells(Satır, 8) = TextBox7
.Cells(Satır, 13) = TextBox7
.Cells(Satır, 13) = ComboBox1
.Cells(Satır, 14) = ComboBox2
.Cells(Satır, 17) = TextBox9
' bu şekilde diğerlerini ayarlayabilirsiniz

End With
End Sub
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Benim için çok faydalı oldu. Allah razı olsun. Uğraştım ve başardım. Elbette sayenizde. Burada bir soru daha sormak istiyorum. Kaydet dediğim zaman emin olmak için, messagebox ("veriler kaydedildi" gibi ) nasıl ayarlayabilirim. Birde kaydettikten sonra yeni bir kayıt için kutu içlerini nasıl boşaltabilirim. (ComboBoxların içi hariç) Birde mutlaka isim alanı doldurulmalı. Boş bırakmayınız gibi bir şart getirebilir miyiz?

Çok mu fazla oldum acaba? :)

Kodlarım aşağıdaki gibi
NOT: messagebox knusunu çözdüm.
Private Sub CommandButton1_Click()
With Sheets("satış")
Satır = .Range("A65536").End(3).Row + 1 ' a sütunundaki son dolu satırı bulup bir sonraki satıra aşağıdaki işlemi yapar
.Cells(Satır, 1) = CDate(TextBox1.Text) 'birinci sütuna Textbox1 tarih formatında yazılır
.Cells(Satır, 3) = TextBox2 ' üçüncü sutuna textbox2 yazar
.Cells(Satır, 4) = TextBox3
.Cells(Satır, 5) = TextBox4
.Cells(Satır, 6) = TextBox5
.Cells(Satır, 7) = TextBox6
.Cells(Satır, 8) = TextBox7
.Cells(Satır, 13) = TextBox8
.Cells(Satır, 14) = ComboBox1
.Cells(Satır, 15) = ComboBox2
.Cells(Satır, 18) = TextBox9
.Cells(Satır, 19) = ComboBox3
.Cells(Satır, 20) = ComboBox4
.Cells(Satır, 21) = ComboBox5
.Cells(Satır, 22) = ComboBox6
.Cells(Satır, 24) = ComboBox7
.Cells(Satır, 31) = ComboBox8
.Cells(Satır, 32) = TextBox10
.Cells(Satır, 33) = TextBox11
.Cells(Satır, 34) = TextBox12
End With
End Sub
 
Son düzenleme:

ulutanas

Altın Üye
Katılım
8 Kasım 2008
Mesajlar
581
Excel Vers. ve Dili
Excel Vers. ve Dili Ofis 2021 TR 32 Bit
Altın Üyelik Bitiş Tarihi
süresiz üye
messagebox İÇN KODLARI BU ŞEKİLDE DEĞİŞTİRİN

Private Sub CommandButton1_Click()
With Sheets("satış")
Satır = .Range("A65536").End(3).Row + 1 ' a sütunundaki son dolu satırı bulup bir sonraki satıra aşağıdaki işlemi yapar
.Cells(Satır, 1) = CDate(TextBox1.Text) 'birinci sütuna Textbox1 tarih formatında yazılır
.Cells(Satır, 3) = TextBox2 ' üçüncü sutuna textbox2 yazar
.Cells(Satır, 4) = TextBox3
.Cells(Satır, 5) = TextBox4
.Cells(Satır, 6) = TextBox5
.Cells(Satır, 7) = TextBox6
.Cells(Satır, 8) = TextBox7
.Cells(Satır, 13) = TextBox7
.Cells(Satır, 13) = ComboBox1
.Cells(Satır, 14) = ComboBox2
.Cells(Satır, 17) = TextBox9
' bu şekilde diğerlerini ayarlayabilirsiniz

End With
deger1 = 0
MsgBox "VERİLER KAYITDEDİLDİ", , "EMİNECİK"
End Sub



GİRDİĞİNİZ VERİLERİ KAYDETTİKTEN SONRA YENİ VERİLER GİRMEK İÇİN FORMDA BULUNAN BİLGİLERİN TEMİZLENMESİNİ İSTİYORSANIZ FORMA YENİ BİR CommandButton EKLEYİNİZ VE AŞAĞIDAKİ KODU YAZINIZ.

Private Sub CommandButton5_Click()
Unload Me
ürünsatış.Show 1
End Sub
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
messagebox İÇN KODLARI BU ŞEKİLDE DEĞİŞTİRİN

Private Sub CommandButton1_Click()
With Sheets("satış")
Satır = .Range("A65536").End(3).Row + 1 ' a sütunundaki son dolu satırı bulup bir sonraki satıra aşağıdaki işlemi yapar
.Cells(Satır, 1) = CDate(TextBox1.Text) 'birinci sütuna Textbox1 tarih formatında yazılır
.Cells(Satır, 3) = TextBox2 ' üçüncü sutuna textbox2 yazar
.Cells(Satır, 4) = TextBox3
.Cells(Satır, 5) = TextBox4
.Cells(Satır, 6) = TextBox5
.Cells(Satır, 7) = TextBox6
.Cells(Satır, 8) = TextBox7
.Cells(Satır, 13) = TextBox7
.Cells(Satır, 13) = ComboBox1
.Cells(Satır, 14) = ComboBox2
.Cells(Satır, 17) = TextBox9
' bu şekilde diğerlerini ayarlayabilirsiniz

End With
deger1 = 0
MsgBox "VERİLER KAYITDEDİLDİ", , "EMİNECİK"
End Sub



GİRDİĞİNİZ VERİLERİ KAYDETTİKTEN SONRA YENİ VERİLER GİRMEK İÇİN FORMDA BULUNAN BİLGİLERİN TEMİZLENMESİNİ İSTİYORSANIZ FORMA YENİ BİR CommandButton EKLEYİNİZ VE AŞAĞIDAKİ KODU YAZINIZ.

Private Sub CommandButton5_Click()
Unload Me
ürünsatış.Show 1
End Sub
Burdan anlamam gereken sadece mesaj kutusu değil mi?
Tabi yeni kayıt için verdiğiniz kodları geçersek? :)
 
Katılım
3 Nisan 2008
Mesajlar
777
Excel Vers. ve Dili
Office 2007 Türkçe
Altın Üyelik Bitiş Tarihi
04-11-2020
Kaydedildi mesajı için kodların sonuna (end sub dan önce)
MsgBox "Kayıt İşlemi Tamamlanmıştır", vbExclamation, ""

Bir sonraki kayıttan önce Textbox'ların içini temizlemek için aşağıdaki kodu kullanabilirsiniz.
For Each txt In Me.Controls
If TypeName(txt) = "TextBox" Then txt.Text = Empty
Next

Boş geçmesini istemediğiniz bir textbox veya combobox için aşağıdaki örneği kendinize uyarlayın. Bunları kaydet kodlarının üstüne yazın (kayıt yapmadan önce uyarı versin)

If TextBox1.Text = Empty Then
MsgBox "TARİH GİRİŞİ YAPINIZ", vbExclamation, "": Exit Sub
End If

Kolay Gelsin
 
Katılım
3 Nisan 2008
Mesajlar
777
Excel Vers. ve Dili
Office 2007 Türkçe
Altın Üyelik Bitiş Tarihi
04-11-2020
Sn. eminecik, birde dikkatimi çekmişti büyük userformlar oluşturmuşsunuz, eğer formlarınızın tüm ekranı kaplaması için böyle büyük hazırladıysanız buna gerek yok aşağıdaki kodları
UserForm_Initialize() kodları içinde kullanarak daha küçük userformlarında ekranı kaplamasını sağlayabilirsiniz.
X1 = Application.Width - 2
Y1 = Application.Height - 2
X2 = Me.Width
Y2 = Me.Height
CX = X1 / X2
CY = Y1 / Y2
Me.Width = X1
Me.Height = Y1
For Each MyCtrl In Me.Controls
MyCtrl.Top = MyCtrl.Top * CY
MyCtrl.Left = MyCtrl.Left * CX
MyCtrl.Width = MyCtrl.Width * CX
MyCtrl.Height = MyCtrl.Height * CY
On Error Resume Next
MyCtrl.Font.Size = MyCtrl.Font.Size * CY
Next
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Kaydedildi mesajı için kodların sonuna (end sub dan önce)
MsgBox "Kayıt İşlemi Tamamlanmıştır", vbExclamation, ""

Bir sonraki kayıttan önce Textbox'ların içini temizlemek için aşağıdaki kodu kullanabilirsiniz.
For Each txt In Me.Controls
If TypeName(txt) = "TextBox" Then txt.Text = Empty
Next

Boş geçmesini istemediğiniz bir textbox veya combobox için aşağıdaki örneği kendinize uyarlayın. Bunları kaydet kodlarının üstüne yazın (kayıt yapmadan önce uyarı versin)

If TextBox1.Text = Empty Then
MsgBox "TARİH GİRİŞİ YAPINIZ", vbExclamation, "": Exit Sub
End If

Kolay Gelsin
Sn. eminecik, birde dikkatimi çekmişti büyük userformlar oluşturmuşsunuz, eğer formlarınızın tüm ekranı kaplaması için böyle büyük hazırladıysanız buna gerek yok aşağıdaki kodları
UserForm_Initialize() kodları içinde kullanarak daha küçük userformlarında ekranı kaplamasını sağlayabilirsiniz.
X1 = Application.Width - 2
Y1 = Application.Height - 2
X2 = Me.Width
Y2 = Me.Height
CX = X1 / X2
CY = Y1 / Y2
Me.Width = X1
Me.Height = Y1
For Each MyCtrl In Me.Controls
MyCtrl.Top = MyCtrl.Top * CY
MyCtrl.Left = MyCtrl.Left * CX
MyCtrl.Width = MyCtrl.Width * CX
MyCtrl.Height = MyCtrl.Height * CY
On Error Resume Next
MyCtrl.Font.Size = MyCtrl.Font.Size * CY
Next
Teşekkür ederim Bedri Bey.
Hemen uygulama yapamayacağım ama, inşallah bu cevabınıza mukabil döneceğim. Sayenizde öğreniyorum ve mutlu oluyorum. :)
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Verdiğiniz kodları uyarladım ancak bir iki sorunum var.
1) TextBox2 yi boş geçmemesini istedim. Uyarı veriyor ama kaydediyor. Kaydetmemesi gerek. Ayrıca benim belirleyeceğim başka Textboxları nasıl ekleyebilirim?
2) TextBoxları boşaltıyor. ComboBoxları boşaltmıyor. Onları boşaltmaması daha iyi. Lakin TextBoxlarımdan birisi tarih içeriyor. Onu boşaltmasın. Ya da benim belirleyeceğim TextBoxları nasıl boşaltmasını sağlayabilirim.

Saygılarımla

Private Sub CommandButton1_Click()
With Sheets("satış")
Satır = .Range("A65536").End(3).Row + 1 ' a sütunundaki son dolu satırı bulup bir sonraki satıra aşağıdaki işlemi yapar
.Cells(Satır, 1) = CDate(TextBox1.Text) 'birinci sütuna Textbox1 tarih formatında yazılır
.Cells(Satır, 3) = TextBox2 ' üçüncü sutuna textbox2 yazar
.Cells(Satır, 4) = TextBox3
.Cells(Satır, 5) = TextBox4
.Cells(Satır, 6) = TextBox5
.Cells(Satır, 7) = TextBox6
.Cells(Satır, 8) = TextBox7
.Cells(Satır, 13) = TextBox8
.Cells(Satır, 14) = ComboBox1
.Cells(Satır, 15) = ComboBox2
.Cells(Satır, 18) = TextBox9
.Cells(Satır, 19) = ComboBox3
.Cells(Satır, 20) = ComboBox4
.Cells(Satır, 21) = ComboBox5
.Cells(Satır, 22) = ComboBox6
.Cells(Satır, 24) = ComboBox7
.Cells(Satır, 31) = ComboBox8
.Cells(Satır, 32) = TextBox10
.Cells(Satır, 33) = TextBox11
.Cells(Satır, 34) = TextBox12

For Each txt In Me.Controls
If TypeName(txt) = "TextBox" Then txt.Text = Empty
Next

If TextBox2.Text = Empty Then
MsgBox "LÜTFEN AD-SOYAD YAZINIZ", vbExclamation, "": Exit Sub
End If

End With
deger1 = 0
MsgBox "KAYIT İŞLEMİ TAMAMLANDI", , ""
End Sub
 
Katılım
3 Nisan 2008
Mesajlar
777
Excel Vers. ve Dili
Office 2007 Türkçe
Altın Üyelik Bitiş Tarihi
04-11-2020
Verdiğiniz kodları uyarladım ancak bir iki sorunum var.
1) TextBox2 yi boş geçmemesini istedim. Uyarı veriyor ama kaydediyor. Kaydetmemesi gerek. Ayrıca benim belirleyeceğim başka Textboxları nasıl ekleyebilirim?
2) TextBoxları boşaltıyor. ComboBoxları boşaltmıyor. Onları boşaltmaması daha iyi. Lakin TextBoxlarımdan birisi tarih içeriyor. Onu boşaltmasın. Ya da benim belirleyeceğim TextBoxları nasıl boşaltmasını sağlayabilirim.

Saygılarımla
1) Kayıt yapmadan önce sorması için 8 no.lu mesajımda açıklama yazmıştım. Sanırım dikkat etmediniz. Başka textbox veya comboboxlar içinde aynı döngüyü alt alta değişik uyarı mesajları vererek girebilirsiniz.
2) Projenizde 10 adet textbox olduğunu varsayalım Textbox1 hariç temizlemesi için aşağıdaki döngüyü End with, end sub aralığında kullanın

For i = 2 To 10
Controls("Textbox" & i).Value = ""
Next

Kolay Gelsin
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Özür dilerim Bedri Bey. Ben kodları yanlış yere yazdığım için olmuyormuş. Enbaşa yazdım oldu. :)
Çok teşekkür ederim.
 
Üst