ListBox çift tıklama olayını pasif yapmak?

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.


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.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,124
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Kodlarınızın arasına "Boolean" bir değişken ekleyip True ve False durumlarını sorgulatabilirsiniz.

Mesela "Kontrol" adında bir değişken tanımlayıp bir işlemin sonunda bu değişkeni True tanımlayıp diğer işlemin başlangıcında bu değişkeni sorgulayarak işlemi yönlendirebilirsiniz.
 
Katılım
19 Haziran 2007
Mesajlar
418
Excel Vers. ve Dili
excel 2007
Merhaba,

Kodlarınızın arasına "Boolean" bir değişken ekleyip True ve False durumlarını sorgulatabilirsiniz.

Mesela "Kontrol" adında bir değişken tanımlayıp bir işlemin sonunda bu değişkeni True tanımlayıp diğer işlemin başlangıcında bu değişkeni sorgulayarak işlemi yönlendirebilirsiniz.
Merhaba Korhan Bey.
Sunduğunuz çözümü ben asla yazamam ama anlamaya çalışıyorum.
Bu çözüm iki tarih arasını sorgulayan butonuma ekleyeceğim değil mi?
Bu çözüm de sanırım çift tıklama olayını pasif yapmak üzerine...

Burada iki çözüm olabilir mi diye sormak istemiştim. Düzelt kodlarından mı kaynaklanıyor bilemiyorum ama, sorun burada çözülürse listboxın çift tıklama
olayını pasif yapmaya gerek yok. Şayet buna bir çözüm bulamaz isem
çift tıklama olayını aktif-pasif yapmak istiyorum.

Ben daha açıklayıcı olması açısından dosyamın son halini ekliyorum.
İki tarih arasını süzdüğünüzde her hangi bir kayıt üzerine çift tıklayın
Gelen veriler üzerinde bir değişiklik yapın ve düzelt butonuna tıklayın.
Düzeltme işlemi alakasız bir satırda yapılacaktır. Aslında bütün sorun bu?
Bu sorun düzeltilemez bir sorun ise Çift tıklama olayını alternatif bir çözüm olarak düşündüm.

Saygılarımla.
 

Ekli dosyalar

Son düzenleme:
Üst