• DİKKAT

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

Userform nesne olaylarını kapatmak.

  • Konbuyu başlatan Konbuyu başlatan Yitik
  • Başlangıç tarihi Başlangıç tarihi
Katılım
23 Ekim 2011
Mesajlar
31
Excel Vers. ve Dili
2003 Türkçe
Merhaba arkadaşlar, userform üzerindeki nesne eventlerini kapatamadım. Listview den textbox1 e veri alıyorum, ancak bu esnada textbox1_change olayı tetikleniyor, bunu nasıl engelleyebilirim?
İyi çalışmalar dilerim.
Kod:
Private Sub TextBox1_Change()
TextBox1 = Evaluate("=UPPER(" & """" & TextBox1 & """" & ")")
Set rs = CreateObject("adodb.recordset")
Call Baglan
If TextBox1 <> "" Then
    s = "SELECT CODE AS [CARİ  KOD], DEFINITION_ AS ÜNVAN, CITY AS ŞEHİR, CYPHCODE AS [SE KODU]"
    s = s & " FROM LG_014_CLCARD"
    s = s & " where LG_014_CLCARD.DEFINITION_ like '" & TextBox1.Text & "%'"
    rs.Open s, con, 3, 3
Else
    ListView2.ListItems.Clear
    Exit Sub
End If
ListView2.ListItems.Clear
    If Not rs.EOF Then
        Do While Not rs.EOF
             With ListView2
            .ListItems.Add , , rs(0).Value
            .ListItems(.ListItems.Count).ListSubItems.Add , , rs(1).Value
            .ListItems(.ListItems.Count).ListSubItems.Add , , rs(2).Value
            End With
            rs.movenext
        Loop
             
    End If
rs.Close
Set rs = Nothing
End Sub

Kod:
Private Sub ListView2_Click()
Application.EnableEvents = False
On Error Resume Next
satir = ListView2.SelectedItem.Index
TextBox7.Text = ListView2.ListItems(satir).Text
TextBox1.Text = ListView2.ListItems(satir).ListSubItems(1).Text
TextBox2.Text = ListView2.ListItems(satir).ListSubItems(2).Text
Application.EnableEvents = True
End Sub

Kod:
Private Sub ListView2_KeyUp(KeyCode As Integer, ByVal Shift As Integer)
Application.EnableEvents = False
On Error Resume Next
satir = ListView2.SelectedItem.Index
TextBox7.Text = ListView2.ListItems(satir).Text
TextBox1.Text = ListView2.ListItems(satir).ListSubItems(1).Text
TextBox2.Text = ListView2.ListItems(satir).ListSubItems(2).Text
Application.EnableEvents = True
End Sub
 
İşinize yarar mı bilemem ama, aklıma gelen 2 yöntem.

1. Textbox1_Change olayını Textbox1_Exit olayına geçiriniz. Böylece Textbox'ta değişiklik olduğunda değil, içine girilip çıkıldığında işlem yapılmış olacaktır.

2. Textbox1_Change olayının başına bir koşul koyunuz. Örneğin = Eğer Textbox1'e yazılan değer;
Atıyorum,
- 10 karakter değilse,
- metin değilse,
- rakam değilse,
- tarih değilse
- ali değilse,
- ayşe değilse gibi... (koşulu siz belirleyiniz)
exit sub deyiniz.
Yani,
If Textbox1.Value <> 10 then exit sub
gibi...
 
Tavsiye ettiğiniz yöntemler işe yarayacaktır. Ancak userform üzerindeki nesnelerin olaylarını kapatmak daha pratik bir çözüm olacak, internette örnekleri var fakat yabancı dilimin yetersizliği yüzünden anlayamıyorum.
 
Son düzenleme:
Merhaba,

Bu tür durumlar için "Boolean" bir değişken tanımlayıp kullanabilirsiniz. Aşağıdaki örnek kodları boş kitapta deneyebilirsiniz.

Aşağıdaki nesneleri hazırlayıp kodu formun kod bölümüne uyguladıktan sonra formu açıp butona tıklayın.

Butona tıkladığınızda TextBox nesnesine "DENEME" yazısı gelecektir. Bu esnada Change olayı devreye girecektir. Fakat araya eklediğimiz "Kontrol" sorgusu Change olayını işlemeden döngüden çıkacaktır. Bu yapıda sizin istediğiniz sonucu sağlayacaktır.

UserForm
TextBox
CommandButton


Kod:
Option Explicit
Dim Kontrol As Boolean

Private Sub CommandButton1_Click()
    Kontrol = True
    TextBox1 = "DENEME"
End Sub

Private Sub TextBox1_Change()
    If Kontrol = True Then Exit Sub
    MsgBox "www.excel.web.tr"
End Sub
 
Korhan Bey teşekkür ederim, bolean değişkeni modüle public tanımladım tüm "event" lerde kullanabiliyorum.
 
Geri
Üst