Veri Kayıt Satırı Problemi

Katılım
18 Kasım 2012
Mesajlar
423
Excel Vers. ve Dili
Microsoft Office 365
Altın Üyelik Bitiş Tarihi
04-07-2024
Merhaba,

Aşağıda paylaşmış olduğum kod bir veri kayıt formuna ait. Normalde başlıklar A1 sütununda idi. Ancak Başlıkları 6 cı sütuna çekince kayıt problemi yaşıyorum. Normalde girdiğim her veri bir list box da görünüyor. Hangi yolu denediysem farklı bir yer hata veriyor. Aşağıdaki kod konusunda yardımcı olabilecek birileri var mıdır ?

Syg,

Kod:
rivate Sub CommandButton1Save_Click()

Sonsatır = WorksheetFunction.CountA(Worksheets("DATA").Range("A:A")) + 1

If Sonsatır = 2 Then

Worksheets("DATA").Cells(Sonsatır, 1) = 1
Worksheets("DATA").Cells(Sonsatır, 2) = ComboBox1ACREG.Value
Worksheets("DATA").Cells(Sonsatır, 4) = TextBox1FLIGHTN.Value
Worksheets("DATA").Cells(Sonsatır, 5) = TextBox2FLIGHTDATE.Value
Worksheets("DATA").Cells(Sonsatır, 6) = TextBox3FLIGHTROUTE.Value
Worksheets("DATA").Cells(Sonsatır, 7) = TextBox4ICAO.Value
Worksheets("DATA").Cells(Sonsatır, 9) = TextBox5COMPANY.Value
Worksheets("DATA").Cells(Sonsatır, 10) = TextBox6INVOICENO.Value
Worksheets("DATA").Cells(Sonsatır, 11) = TextBox7INVOICEDATE.Value
Worksheets("DATA").Cells(Sonsatır, 12) = ComboBox2SERVICE.Value
Worksheets("DATA").Cells(Sonsatır, 13) = ComboBox3SERVICETYPE.Value
Worksheets("DATA").Cells(Sonsatır, 14) = TextBox8DESCRIPTION.Value
Worksheets("DATA").Cells(Sonsatır, 15) = TextBox9QUANTITY.Value
Worksheets("DATA").Cells(Sonsatır, 16) = TextBox10UNITPRICE.Value
Worksheets("DATA").Cells(Sonsatır, 18) = TextBox12DISBURSEMENT.Value
Worksheets("DATA").Cells(Sonsatır, 19) = TextBox13DISBURSEMENTTAX.Value
Worksheets("DATA").Cells(Sonsatır, 20) = TextBox14INVOICETAX.Value
Worksheets("DATA").Cells(Sonsatır, 22) = ComboBox4CURRENCY.Value
Worksheets("DATA").Cells(Sonsatır, 23) = TextBox15DESCRIPTIONS.Value

Else

Worksheets("DATA").Cells(Sonsatır, 1) = Worksheets("DATA").Cells(Sonsatır - 1, 1) + 1
Worksheets("DATA").Cells(Sonsatır, 2) = ComboBox1ACREG.Value
Worksheets("DATA").Cells(Sonsatır, 4) = TextBox1FLIGHTN.Value
Worksheets("DATA").Cells(Sonsatır, 5) = TextBox2FLIGHTDATE.Value
Worksheets("DATA").Cells(Sonsatır, 6) = TextBox3FLIGHTROUTE.Value
Worksheets("DATA").Cells(Sonsatır, 7) = TextBox4ICAO.Value
Worksheets("DATA").Cells(Sonsatır, 9) = TextBox5COMPANY.Value
Worksheets("DATA").Cells(Sonsatır, 10) = TextBox6INVOICENO.Value
Worksheets("DATA").Cells(Sonsatır, 11) = TextBox7INVOICEDATE.Value
Worksheets("DATA").Cells(Sonsatır, 12) = ComboBox2SERVICE.Value
Worksheets("DATA").Cells(Sonsatır, 13) = ComboBox3SERVICETYPE.Value
Worksheets("DATA").Cells(Sonsatır, 14) = TextBox8DESCRIPTION.Value
Worksheets("DATA").Cells(Sonsatır, 15) = TextBox9QUANTITY.Value
Worksheets("DATA").Cells(Sonsatır, 16) = TextBox10UNITPRICE.Value
Worksheets("DATA").Cells(Sonsatır, 18) = TextBox12DISBURSEMENT.Value
Worksheets("DATA").Cells(Sonsatır, 19) = TextBox13DISBURSEMENTTAX.Value
Worksheets("DATA").Cells(Sonsatır, 20) = TextBox14INVOICETAX.Value
Worksheets("DATA").Cells(Sonsatır, 23) = TextBox15DESCRIPTIONS.Value

End If
temizle
End Sub


Private Sub UserForm_Initialize()
ListBox1.ColumnCount = 22
ListBox1.RowSource = "DATA!KAYITSAYFASI"
ListBox1.ColumnWidths = "13;35;70;50;55;60;50;50;50;40;40;40;40;40;40;40;40;40;40;40;40;40;40"
Module2.MaxMinButton (Me.Caption)
End Sub


Şimdiden çok teşekkürler.

Syg,
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
3. satırdaki ifadeyi
If Sonsatır = 7 Then
yaparak denemiş miydiniz?
 
Katılım
18 Kasım 2012
Mesajlar
423
Excel Vers. ve Dili
Microsoft Office 365
Altın Üyelik Bitiş Tarihi
04-07-2024
3. satırdaki ifadeyi
If Sonsatır = 7 Then
yaparak denemiş miydiniz?
Merhabalar,

Evet söylemiş olduğunuz gibi değiştirdiğimde listbox da başlıklar düzeliyor ama bu sefede kayıt işlemini yaparken verileri yazmaya A2 den başlıyor. Sondaki koda aşağıdaki gibi bir ekleme yapmayı denedim

ListBox1.RowSource = "A6:W6"


Ama bu seferde kayıt sırasında eskisini silip hep aynı satıra yenisini yazıyor.

Syg,
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,791
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Arkadaşım,
Siz 5 satır aşağı aldığınızı yazmışsınız. Demek ki, her satırı 5 birim aşağı alacaksınız. Buna göre düzenlerseniz probleminiz biter
 

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
Kayıt yapılacak satırı bulmak için kullandığınız yöntemi değiştirmeniz çözüm olabilir..

Bu satır yerine;
Sonsatır = WorksheetFunction.CountA(Worksheets("DATA").Range("A:A")) + 1

Alttaki satırı kullanabilirsiniz..
Sonsatır = Sheets("DATA").Cells(Sheets("DATA").Rows.Count, 1).End(3).Row + 1



Geçenlerde farklı bir başlıkta VBA tarafında kendinizi geliştirmek istediğinizi ifade etmiştiniz. Nacizane küçük tavsiyelerde bulunmak isterim..

VBA tarafında tanımlamalar çok önemlidir. Bunları kullanmanızda fayda var. (Genellikle DIM kullanılarak yapılan tanımlamalar)

Veritabanı hazırlıkları için bunlar nelerdir kısaca örneklersek;

Dosya (Kitap) tanımlaması
Sayfa tanımlaması
Hücre (Alan) tanımlaması
Son_Satır tanımlaması
Son_Sütun tanımlası
vs...

Bu tanımlamaları kullanmanın amacı hem doğru veri yönetimi hemde kısa tanımlamalar kullanarak yazım sırasında zaman tasarrufu sağlamaktır.

Örneğin paylaştığınız kod bloğunda aşağıdaki şekilde yazarak işlem yapmışsınız.

Worksheets("DATA").Cells(Sonsatır, 23) = TextBox15DESCRIPTIONS.Value

Kalın fontla belirttim kısımları daha kısa şekilde kullanabilirsiniz. Bunlar size uzun kodlama sırasında avantaj sağlayacaktır.

Ek olarak With-End With bloklarını kullanarak bir tık daha avantajlı kod blokları yazabilirsiniz.

Bunlarla ilgili forumda bolca örnek var. Arama yaparsanız ulaşabilirsiniz..
 
Katılım
18 Kasım 2012
Mesajlar
423
Excel Vers. ve Dili
Microsoft Office 365
Altın Üyelik Bitiş Tarihi
04-07-2024
Kayıt yapılacak satırı bulmak için kullandığınız yöntemi değiştirmeniz çözüm olabilir..

Bu satır yerine;
Sonsatır = WorksheetFunction.CountA(Worksheets("DATA").Range("A:A")) + 1

Alttaki satırı kullanabilirsiniz..
Sonsatır = Sheets("DATA").Cells(Sheets("DATA").Rows.Count, 1).End(3).Row + 1

Hocam peki kayıdı 7. satırdan başlatmak ister isem yukarı kodu End(3) yerine End (7) mi yapmam gerekir? Buradaki End(3) ve .Row+1 in anlamı nedir?

Syg,
 

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
Önerdiğim son boş satırı bulma kodu A sütununa göre işlem yapıyor.

Sonsatır = Sheets("DATA").Cells(Sheets("DATA").Rows.Count, 1).End(3).Row + 1

Kalın fontlu 1 değeri sütunun indisidir. Yani sıra numarasıdır. Siz hangi sütuna göre yapacaksanız onu yazmanız yeterli olacaktır.

Diyelim ki sizin başlıklarınız 6. satırda bulunuyor ve verilerinizi F sütunundan itibaren sayfaya aktarmak istiyorsunuz. Bu durumda aşağıdaki iki satırdan birisini kullanabilirsiniz.

Sonsatır = Sheets("DATA").Cells(Sheets("DATA").Rows.Count, 6).End(3).Row + 1

Sonsatır = Sheets("DATA").Cells(Sheets("DATA").Rows.Count, "F").End(3).Row + 1

Bu iki satırda aynı görevi görmektedir. Kırmızı renkli kısımlar aynı birimi ifade eder. Sadece yazım farkı vardır. Siz hangisi kolayınıza geliyorsa onu kullanabilirsiniz.
 
Katılım
18 Kasım 2012
Mesajlar
423
Excel Vers. ve Dili
Microsoft Office 365
Altın Üyelik Bitiş Tarihi
04-07-2024
Kod:
Private Sub CommandButton1Save_Click()

Sonsatır = Sheets("DATA").Cells(Sheets("DATA").Rows.Count, 6).End(3).Row + 1

If Sonsatır = 6 Then

Worksheets("DATA").Cells(Sonsatır, 1) = 1
Worksheets("DATA").Cells(Sonsatır, 2) = ComboBox1ACREG.Value
Worksheets("DATA").Cells(Sonsatır, 4) = TextBox1FLIGHTN.Value
Worksheets("DATA").Cells(Sonsatır, 5) = TextBox2FLIGHTDATE.Value
Worksheets("DATA").Cells(Sonsatır, 6) = TextBox3FLIGHTROUTE.Value
Worksheets("DATA").Cells(Sonsatır, 7) = TextBox4ICAO.Value
Worksheets("DATA").Cells(Sonsatır, 9) = TextBox5COMPANY.Value
Worksheets("DATA").Cells(Sonsatır, 10) = TextBox6INVOICENO.Value
Worksheets("DATA").Cells(Sonsatır, 11) = TextBox7INVOICEDATE.Value
Worksheets("DATA").Cells(Sonsatır, 12) = ComboBox2SERVICE.Value
Worksheets("DATA").Cells(Sonsatır, 13) = ComboBox3SERVICETYPE.Value
Worksheets("DATA").Cells(Sonsatır, 14) = TextBox8DESCRIPTION.Value
Worksheets("DATA").Cells(Sonsatır, 15) = TextBox9QUANTITY.Value
Worksheets("DATA").Cells(Sonsatır, 16) = TextBox10UNITPRICE.Value
Worksheets("DATA").Cells(Sonsatır, 18) = TextBox12DISBURSEMENT.Value
Worksheets("DATA").Cells(Sonsatır, 19) = TextBox13DISBURSEMENTTAX.Value
Worksheets("DATA").Cells(Sonsatır, 20) = TextBox14INVOICETAX.Value
Worksheets("DATA").Cells(Sonsatır, 22) = ComboBox4CURRENCY.Value
Worksheets("DATA").Cells(Sonsatır, 23) = TextBox15DESCRIPTIONS.Value

Else

Worksheets("DATA").Cells(Sonsatır, 1) = Worksheets("DATA").Cells(Sonsatır - 1, 1) + 1
Worksheets("DATA").Cells(Sonsatır, 2) = ComboBox1ACREG.Value
Worksheets("DATA").Cells(Sonsatır, 4) = TextBox1FLIGHTN.Value
Worksheets("DATA").Cells(Sonsatır, 5) = TextBox2FLIGHTDATE.Value
Worksheets("DATA").Cells(Sonsatır, 6) = TextBox3FLIGHTROUTE.Value
Worksheets("DATA").Cells(Sonsatır, 7) = TextBox4ICAO.Value
Worksheets("DATA").Cells(Sonsatır, 9) = TextBox5COMPANY.Value
Worksheets("DATA").Cells(Sonsatır, 10) = TextBox6INVOICENO.Value
Worksheets("DATA").Cells(Sonsatır, 11) = TextBox7INVOICEDATE.Value
Worksheets("DATA").Cells(Sonsatır, 12) = ComboBox2SERVICE.Value
Worksheets("DATA").Cells(Sonsatır, 13) = ComboBox3SERVICETYPE.Value
Worksheets("DATA").Cells(Sonsatır, 14) = TextBox8DESCRIPTION.Value
Worksheets("DATA").Cells(Sonsatır, 15) = TextBox9QUANTITY.Value
Worksheets("DATA").Cells(Sonsatır, 16) = TextBox10UNITPRICE.Value
Worksheets("DATA").Cells(Sonsatır, 18) = TextBox12DISBURSEMENT.Value
Worksheets("DATA").Cells(Sonsatır, 19) = TextBox13DISBURSEMENTTAX.Value
Worksheets("DATA").Cells(Sonsatır, 20) = TextBox14INVOICETAX.Value
Worksheets("DATA").Cells(Sonsatır, 23) = TextBox15DESCRIPTIONS.Value

End If
temizle
End Sub
Önerdiğim son boş satırı bulma kodu A sütununa göre işlem yapıyor.

Sonsatır = Sheets("DATA").Cells(Sheets("DATA").Rows.Count, 1).End(3).Row + 1

Kalın fontlu 1 değeri sütunun indisidir. Yani sıra numarasıdır. Siz hangi sütuna göre yapacaksanız onu yazmanız yeterli olacaktır.

Diyelim ki sizin başlıklarınız 6. satırda bulunuyor ve verilerinizi F sütunundan itibaren sayfaya aktarmak istiyorsunuz. Bu durumda aşağıdaki iki satırdan birisini kullanabilirsiniz.

Sonsatır = Sheets("DATA").Cells(Sheets("DATA").Rows.Count, 6).End(3).Row + 1

Sonsatır = Sheets("DATA").Cells(Sheets("DATA").Rows.Count, "F").End(3).Row + 1

Bu iki satırda aynı görevi görmektedir. Kırmızı renkli kısımlar aynı birimi ifade eder. Sadece yazım farkı vardır. Siz hangisi kolayınıza geliyorsa onu kullanabilirsiniz.
Peki hocam burada End(3) ün alamı nedir ?

Merak ettiğim için soruyorum. Kodları söylemiş olduğunuz gibi giridm ama bu seferde aşağıdkaş hatayı aldım.

247016
 

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
Peki hocam burada End(3) ün alamı nedir ?
Aşağıdaki adımları izleyiniz.

Boş bir excel dosyası açınız.
A sütununda en son satıra gidiniz.
CTRL+YUKARI OK tuşuna basınız. End(3)
Bulunduğunuz satır en son satırdır.

Sonra A5 hücresine birşeyler yazınız.
Tekrar en son satıra gidiniz.
CTRL+YUKARI OK tuşuna basınız. End(3)
Bulunduğunuz satır en son satırdır.

Kısaca End(3) = CTRL+YUKARI OK TUŞU anlamına gelmektedir.
 
Katılım
18 Kasım 2012
Mesajlar
423
Excel Vers. ve Dili
Microsoft Office 365
Altın Üyelik Bitiş Tarihi
04-07-2024
@Korhan Ayhan hocam

nerede yanlış yapıyorum bulamadım açıkcası. Ne yapsam olmuyor. Belkide çok basit bir değişiklik. En azından bende nerede hata yapmam gerektiğini ve nasıl yapmam gerektiğini bu şekilde anlamış olurum inşallah.

Dosyayı paylaşsam yardımcı olma şansınız var mıdır ? İkinci userform da düzgün çalışmıyor. Birde sondaki başlık yani w sütunu çıkmıyor.


Syg,
 

Ekli dosyalar

Son düzenleme:
Katılım
18 Kasım 2012
Mesajlar
423
Excel Vers. ve Dili
Microsoft Office 365
Altın Üyelik Bitiş Tarihi
04-07-2024
Merhaba,

Yardımcı olabilicek birileri var mıdır ?

Syg,
 

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
Sayfada AD tanımlaması kullanmışsınız. (KAYITSAYFASI)

ListBox1.RowSource = "DATA!KAYITSAYFASI"

Bu tanımlama =DATA!$A:$V şeklinde yapılmış. Doğal olarak "W" sütununu göstermemesi normaldir.

Ya bu alanı dinamik olarak tanımlamalısınız. Yada direkt kod tarafında RowSource tarafında adres tanımlamalısınız. Mesela en basit haliyle aşağıdaki gibi olabilir.

C++:
Private Sub UserForm_Initialize()
    ListBox1.ColumnCount = 23
    ListBox1.RowSource = "DATA!A8:W" & WorksheetFunction.Max(8, Sheets("DATA").Cells(Rows.Count, 1).End(3).Row)
    ListBox1.ColumnHeads = True
    ListBox1.ColumnWidths = "13;35;70;50;55;60;50;50;50;40;40;40;40;40;40;40;40;40;40;40;40;40;40"
    Module2.MaxMinButton (Me.Caption)
End Sub
Ayrıca DATA sayfasına üste boş satır eklediğiniz için KOD tarafında adresleri gerekiyorsa döngülerin satır başlangıçlarını buna göre revize etmelisiniz.
 
Katılım
18 Kasım 2012
Mesajlar
423
Excel Vers. ve Dili
Microsoft Office 365
Altın Üyelik Bitiş Tarihi
04-07-2024
@Korhan Ayhan

Ayrıca DATA sayfasına üste boş satır eklediğiniz için KOD tarafında adresleri gerekiyorsa döngülerin satır başlangıçlarını buna göre revize etmelisiniz.

# Hocam peki tam olarak hangi kod üzerinde değişiklik yapmam gerekiyor ? İnanın aklım iyice karıştı

syg
 

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
Bence biraz nette paylaşılan veritabanı videolarını inceledikten sonra proje yapımına geçmeniz sizin için daha faydalı olacaktır.

Altta ki linkte faydalı olabilir..

 
Katılım
18 Kasım 2012
Mesajlar
423
Excel Vers. ve Dili
Microsoft Office 365
Altın Üyelik Bitiş Tarihi
04-07-2024
Kod:
rivate Sub UserForm_Initialize()
    ListBox1.ColumnCount = 23
    ListBox1.RowSource = "DATA!A8:W" & WorksheetFunction.Max(8, Sheets("DATA").Cells(Rows.Count, 1).End(3).Row)
    ListBox1.ColumnHeads = True
    ListBox1.ColumnWidths = "13;35;70;50;55;60;50;50;50;40;40;40;40;40;40;40;40;40;40;40;40;40;40"
    Module2.MaxMinButton (Me.Caption)
End Sub
Hocam aşağıdaki şekilde düzelterek sonuca ulaştım çok çok teşekkürler.

Kod:
Sonsatır = Sheets("DATA").Cells(Sheets("DATA").Rows.Count, 1).End(3).Row + 1

If Sonsatır = 7 Then
Yanlız listbox başlıklaındaki çizgileri nasıl kaldırabilirim ? ve başlıkları nasıl bold yapabilirim ?


Syg,
 

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
Bahsettiğiniz işlemleri ListBox üzerinde yapamazsınız.
 
Üst