- Katılım
- 19 Haziran 2007
- Mesajlar
- 418
- Excel Vers. ve Dili
- excel 2007
Merhaba arkadaşlar .
Aşağıdaki kodlarla iki tarih arası süzme işlemi yapıyorum.
Bu işlemden sonra çağırdığım verilerde aşağıdaki kodlarla düzel yaptığımda yanlış işlem oluşuyor.
Diyelim ki süzme esnasında 5 satır veri alınmış olsun. bu verilerden 1. sıradaki veriyi çift tıklayarak çağırıyorum. Düzeltmeleri yaptıktan sonra düzelt butonuna tıkladığımda Excel sayfamın en başındaki veriyi değiştiriyor.
DÜZELT KODLARIM:
Bu süzme işlemini yaptığımda Kaydet butonum doğru çalışıyor. Onun kodlarını da eklemek istiyorum.
Kaydet kodlarım:
Burada yapmak istediğim; İki tarih arasını listelediğimde Düzelt butonumdaki hatayı giderebilir miyiz?
Şayet olmayacaksa Listeleme aldığım koda nasıl bir ekleme yapmalıyım ki, ListBoxtaki Çift tıklama olayı pasif olsun?
Saygılarımla.
Aşağıdaki kodlarla iki tarih arası süzme işlemi yapıyorum.
Kod:
Private Sub CommandButton12_Click()
If IsDate(TextBox16.Value) = False Then MsgBox "RAPOR BAŞLANGIÇ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub
If IsDate(TextBox17.Value) = False Then MsgBox "RAPOR BİTİŞ TARİHİNİ GİRMEDİNİZ !!!", vbInformation: Exit Sub
bastarih = CDbl(CDate(TextBox16.Value))
sontarih = CDbl(CDate(TextBox17.Value))
Satir = 0
On Error Resume Next
ListBox1.RowSource = ""
ListBox1.Clear
On Error GoTo 0
ReDim Veri_Dizisi(1 To 22, 1 To 65536) ' bu kod kendimize 22 sutun 65536 satır bir tablo yaratır sanki bos bir excel sayfası gibi.
With Worksheets("Satış")
For i = 2 To .Cells(Rows.Count, 1).End(3).Row 'burada bizim satış tablosunun dolu satırlarının sayısını buluyoruz.
'if ile ilk satıra bakıyoruz bizim istediğimiz kritere uyuyormu. yani kayıt tatihi bizim istediğimiz satırlar arasındamı.Evet ise bir alt bolumdeki yeni tabloyu dolduracağız.
If CDate(.Cells(i, 1).Value) >= bastarih And CDate(.Cells(i, 1).Value) <= sontarih Then 'tarihlerin bakılacağı sütun
'-------------------------------------------
Satir = Satir + 1
For Sutun = 1 To 21
Veri_Dizisi(Sutun, Satir) = .Cells(i, Sutun).Text
Next Sutun
End If
'eğer satış sayfasındaki ilk satır bizim istediğimiz satır ise ilk olusturduğumuz bos tablonun ilk satırına ve sutunlarına satış sayfasındaki ilgili satırı alma işlemi yapılıyor.
'Artık bizim Veri_dizini tablomuzun 1 satır ve 21 sutunu satış tablosunun ilk satırı ve sutunları aynı oldu..
'Burda aslında sabit veriler arasında işimize yarayanları süzüp veri_dinzi tablosuna atıyoruz.
'-----------------------------------------------
Next i 'burda artık satış sayfasının 2 satırına git kriterlere uyuyorsa Veri_dizini tablosuna yaz için kodları geri gonderiyoruz taki satış sayfasındaki satırlar bitene kadar.
End With
If Satir > 0 Then ReDim Preserve Veri_Dizisi(1 To 22, 1 To Satir) 'burada tablomuza sadece istediğimiz bilgileri ekledik bos kalan satırları kaldırıp tabloyu sabitliyoruz.
ListBox1.Column = Veri_Dizisi 'listbox içinde bizim tabloyu gostermesi için bu kodu ekledik.
TextBox18.Text = ListBox1.ListCount 'burda listboxta kaç tane satır varsa textboxa onu yaz dedik.
For e = 0 To ListBox1.ListCount - 1
t1 = CDbl(Val(ListBox1.List(e, 8))) + CDbl(Val(t1))
Next e
TextBox19.Text = FormatNumber(t1, 2) & " TL"
End Sub
Bu işlemden sonra çağırdığım verilerde aşağıdaki kodlarla düzel yaptığımda yanlış işlem oluşuyor.
Diyelim ki süzme esnasında 5 satır veri alınmış olsun. bu verilerden 1. sıradaki veriyi çift tıklayarak çağırıyorum. Düzeltmeleri yaptıktan sonra düzelt butonuna tıkladığımda Excel sayfamın en başındaki veriyi değiştiriyor.
DÜZELT KODLARIM:
Kod:
Private Sub CommandButton3_Click()
CommandButton16.Enabled = True
If ListBox1.ListCount > 0 Then
Lab = ListBox1.ListIndex + 1
Else
MsgBox "listede hiç veri yok"
Exit Sub
End If
If Lab <= 0 Then
MsgBox "listeden veri seçiniz"
Exit Sub
End If
'Değiştir butonuna basıldığında yapılacak işlemler.
sor = MsgBox("Değiştirmek istediğinizden emin misiniz?", vbYesNo)
'mesaj kutusu devreye giriyor.
If sor = vbNo Then Exit Sub
'evet veya hayır cevaplarından Hayır ise kodlar sonlandırılıyor.
If ListBox1.Column(21) = 0 Or ListBox1.Column(21) = "" Then
sonsat = ListBox1.ListIndex + 2
Else
sonsat = ListBox1.Column(21)
End If
'son satır numarası alınıyor.
Cells(sonsat, 1) = TextBox1.Value
'ikinci sutununun en son satırına textbox2 deki açıklama yazılıyor.
Cells(sonsat, 2) = TextBox2.Value
Cells(sonsat, 3) = TextBox3.Value
Cells(sonsat, 4) = TextBox4.Value
Cells(sonsat, 5) = ComboBox1.Value
Cells(sonsat, 6) = ComboBox2.Value
Cells(sonsat, 7) = TextBox5.Value
Cells(sonsat, 8) = TextBox6.Value
Cells(sonsat, 9) = TextBox7.Value
Cells(sonsat, 10) = ComboBox3.Value
Cells(sonsat, 11) = ComboBox4.Value
Cells(sonsat, 12) = TextBox8.Value
Cells(sonsat, 13) = ComboBox5.Value
Cells(sonsat, 14) = ComboBox6.Value
Cells(sonsat, 15) = ComboBox7.Value
Cells(sonsat, 16) = ComboBox8.Value
Cells(sonsat, 17) = ComboBox9.Value
Cells(sonsat, 18) = ComboBox10.Value
Cells(sonsat, 19) = ComboBox11.Value
Cells(sonsat, 20) = TextBox9.Value
Cells(sonsat, 21) = CLng(CDate(TextBox10))
Cells(sonsat, 22) = CLng(CDate(TextBox12))
ListBox1.RowSource = "A2:V" & [a65536].End(3).Row
'liste kutusunun satır kaynagının hangi hücreler olduğu belirtiliyor.
MsgBox "DEĞİŞİKLİK YAPILMIŞTIR"
For i = 2 To 10
Controls("Textbox" & i).Value = ""
Next
ListBox1.RowSource = "A1:U" & [a65536].End(3).Row
Call UserForm_Initialize
End Sub
Bu süzme işlemini yaptığımda Kaydet butonum doğru çalışıyor. Onun kodlarını da eklemek istiyorum.
Kaydet kodlarım:
Kod:
Private Sub CommandButton1_Click()
If CDate(TextBox1) <> Date Then
MsgBox "LÜTFEN TARİHİ KONTROL EDİNİZ! YAPTIĞINIZ İŞLEM GÜNLÜK KAYITLAR İÇİNDİR. BUGÜNÜN TARİHİNİ GİRİNİZ!", vbExclamation, "T A R İ H"
Exit Sub
End If
If CDate(TextBox1) <> Date Then
MsgBox "Tarih Bugüne Ait Değil"
Exit Sub
End If
If TextBox3.Text = Empty Then
MsgBox "Lütfen Alıcı Adı ve Soyadı Giriniz.", vbExclamation, "": Exit Sub
End If ' BOŞ BIRAKILMASINI İSTEMEDİĞİNİZ YERLER İÇİN...
If TextBox4.Text = Empty Then
MsgBox "Alıcı Adres Bilgilerini Kontrol ediniz!", vbExclamation, "": Exit Sub
End If ' BOŞ BIRAKILMASINI İSTEMEDİĞİNİZ YERLER İÇİN...
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.Value) 'birinci sütuna Textbox1 tarih formatında yazılır
.Cells(satır, 2) = TextBox2.Value ' ikinci sutuna textbox2 yazar
.Cells(satır, 3) = TextBox3.Value
.Cells(satır, 4) = TextBox4.Value
.Cells(satır, 5) = ComboBox1.Value
.Cells(satır, 6) = ComboBox2.Value
.Cells(satır, 7) = TextBox5.Value
.Cells(satır, 8) = TextBox6.Value
.Cells(satır, 9) = TextBox7.Value
.Cells(satır, 10) = ComboBox3.Value
.Cells(satır, 11) = ComboBox4.Value
.Cells(satır, 12) = TextBox8.Value
.Cells(satır, 13) = ComboBox5.Value
.Cells(satır, 14) = ComboBox6.Value
.Cells(satır, 15) = ComboBox7.Value
.Cells(satır, 16) = ComboBox8.Value
.Cells(satır, 17) = ComboBox9.Value
.Cells(satır, 18) = ComboBox10.Value
.Cells(satır, 19) = ComboBox11.Value
.Cells(satır, 20) = TextBox9.Value
.Cells(satır, 21) = CLng(CDate(TextBox10))
For i = 2 To 10
Controls("Textbox" & i).Value = ""
Next
ListBox1.RowSource = "A1:U" & [a65536].End(3).Row
'liste kutusunun satır kaynagının hangi hücreler olduğu belirtiliyor.
For e = 0 To ListBox1.ListCount - 1
t1 = CDbl(Val(ListBox1.List(e, 8))) + CDbl(Val(t1))
Next e
TextBox19.Text = FormatNumber(t1, 2) & " TL"
End With
deger1 = 0
MsgBox "KAYIT İŞLEMİ TAMAMLANDI", , ""
Call UserForm_Initialize
End Sub
Burada yapmak istediğim; İki tarih arasını listelediğimde Düzelt butonumdaki hatayı giderebilir miyiz?
Şayet olmayacaksa Listeleme aldığım koda nasıl bir ekleme yapmalıyım ki, ListBoxtaki Çift tıklama olayı pasif olsun?
Saygılarımla.