• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Veri Kayıt Satırı Problemi

Katılım
18 Kasım 2012
Mesajlar
423
Excel Vers. ve Dili
Microsoft Office 365
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,
 
3. satırdaki ifadeyi
If Sonsatır = 7 Then
yaparak denemiş miydiniz?
 
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,
 
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
 
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..
 
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,
 
Ö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.
 
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
 
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.
 
@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:
Merhaba,

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

Syg,
 
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.
 
@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
 
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..

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