TextBox Setfocus Problemi

Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selam Arkadaşlar,

Aşağıdaki kodlar ile TextBox'a metin girişlerini engelliyorum. Ancak, TextBox9'a bir türlü SetFocus yapamıyorum. Neden yapamıyorum? Yardımcı olabilir misiniz?
Kod:
Private Sub TextBox9_Change()

If Me.TextBox9 <> "" Then
If Not IsNumeric(Me.TextBox9) Then

MsgBox "sayısal değer giriniz"

    For i = 1 To Len(Me.TextBox9)
    kr = Mid(Me.TextBox9, i, 1)
        If Not IsNumeric(kr) Then
        Me.TextBox9.SelStart = 0
        Me.TextBox9.SelLength = i - 1
        sol = Me.TextBox9.SelText
        
        Me.TextBox9.SelStart = i
        Me.TextBox9.SelLength = Len(Me.TextBox9) - i
        sag = Me.TextBox9.SelText
        End If
    Next
Me.TextBox9 = sol & sag
Me.TextBox9.SetFocus
End If

End If

End Sub
 
Katılım
2 Mart 2005
Mesajlar
556
Excel Vers. ve Dili
Office 2013 Türkçe
Sayın Ergün Güler,
Kodlar gayet güzel çalışıyor.Sorun tam olarak nerede biraz daha açar mısınız?Userform üzerinde başka bir control varsa ondan dolayı sıkıntı çıkartıyor olabilir.Hata mesajımı alıyorsunuz kodları çalıştırınca?
 

Korhan Ayhan

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

Nesnenin "KeyDown" olayını araştırın. Forumda örnekler var.
 
Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Sayın Ergün Güler,
Kodlar gayet güzel çalışıyor.Sorun tam olarak nerede biraz daha açar mısınız?Userform üzerinde başka bir control varsa ondan dolayı sıkıntı çıkartıyor olabilir.Hata mesajımı alıyorsunuz kodları çalıştırınca?
Sayın bedersu,

Kodların çalışmasında elbette problem yok. Sadece sayı girilmesi gereken Textbox'a metin girişi yapıldığı anda uyarı verip, metin içren karakteri silmektedir. Kodlar bana aittir. diğerlerinden 1. farkı; hatalı girişte textbox'un tamamını silmez. sadece metin olan karakteri siler. 2. farkı; Textbox'taki sayıların başına, ortasına veya sonuna metin giriş yapılmak istendiğinde bile sadece hatalı giriş yapılmak istenen metni siler. yani textboxta 12345 var diyelim. 3 ile 4 arasına mouse ile tıklayıp A yazmak istediğinde A'yi silecektir. Buraya kadar problem yok.
Problem şu;
Siz 12345 yazmak isterken yanlışlıkla 1234A yazdığınızda A'yı siliyor. Textbox'ta 1234 görünüyor. Sonra TExtbox'a setfocus yapması lazım ki, I şeklindeki mouse "cursor"ü 4'ün sağında yanıp sönsün. Böylece doğru sayıyı yazmaya devam edelim. Setfocus olmayınca siz doğru sayıyı giriş yapmanız için mouse ile textbox'a tıklamanız gerekiyor.
Bu problemi engellemek için şu an aşağıdaki gibi çözüm kullanıyorum. önce kırmızı alandaki nesneye setfocus yapıyorum. sonra asıl textbox'a.
Kod:
Private Sub TextBox9_Change()

If Me.TextBox9 <> "" Then
If Not IsNumeric(Me.TextBox9) Then

MsgBox "sayısal değer giriniz"

    For i = 1 To Len(Me.TextBox9)
    kr = Mid(Me.TextBox9, i, 1)
        If Not IsNumeric(kr) Then
        Me.TextBox9.SelStart = 0
        Me.TextBox9.SelLength = i - 1
        sol = Me.TextBox9.SelText
        
        Me.TextBox9.SelStart = i
        Me.TextBox9.SelLength = Len(Me.TextBox9) - i
        sag = Me.TextBox9.SelText
        Me.TextBox9 = sol & sag
[COLOR="Red"][B]Me.CommandButton1.SetFocus[/B][/COLOR]
Me.TextBox9.SetFocus
        End If
    Next

End If

End If

End Sub
 
Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Merhaba,

Nesnenin "KeyDown" olayını araştırın. Forumda örnekler var.
Selam Hocam,
Kodları "KeyDown" olayına yazdım. setfocus olmuyor ve hatalı karakter girişini 1 karakter sonra anlayabiliyor. Yani 123a yazdım. hata vermiyor. 123a5 yazmak isteyince ancak hata veriyor.
Hocam şunu anlamak istiyorum; neden olmuyor?
 
Katılım
2 Mart 2005
Mesajlar
556
Excel Vers. ve Dili
Office 2013 Türkçe
Sayın Ergün Güler,
Bir userform oluşturup textbox ekledim.Sayıları girdim.Bir de harf girdim.uyarı mesajı çıktı,tamam dedim,harfi sildi ve cursor son rakamın sağında yanıp sönmeye devam etti.Sizin dediğiniz gibi bir problemle karşılaşmadım.Mümkünse dosya ekler misiniz?Bir de sizin oluşturduğunuz şekilde deneyelim.
 
Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Sayın Ergün Güler,
Bir userform oluşturup textbox ekledim.Sayıları girdim.Bir de harf girdim.uyarı mesajı çıktı,tamam dedim,harfi sildi ve cursor son rakamın sağında yanıp sönmeye devam etti.Sizin dediğiniz gibi bir problemle karşılaşmadım.Mümkünse dosya ekler misiniz?Bir de sizin oluşturduğunuz şekilde deneyelim.
4.mesajdaki kodlar ile sorun yok. 1.mesajdaki kodlar ile sorun setfocus olmuyor.
Benim dosya büyük ve karışık. Siz sizde sorun olmayan dosyayı yükleyebilir misiniz?
 
E

ExcelF1

Misafir
Örnek dosya ekleme imkanınız var ise bir deneyelim.
 
Son düzenleme:
E

ExcelF1

Misafir
Sayın bedersu'nun 6 nolu mesajda belirtiği gibi, userform oluşturup kodlarını yerleştirdim ve çalışmasında herhangi bir sıkıntı yaşamadım.

Bilginize...
 

Korhan Ayhan

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

Ergün bey özellikle formun show modal özelliği false iken bazı komutlar istenilen tepkiyi vermiyor. Bu şekilde kullanmak zorundaysanız sizin bulduğunuz gibi kaçamak yolları kullanabilirsiniz.

Ayrıca size yanıt verirken yanlışlıkla "KeyDown" olarak yazmışım. Aşağıdaki olayı kullanabilirsiniz.

Kod:
Private Sub TextBox9_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case Asc("0") To Asc("9")
        Case Asc(",")
    Case Else
        KeyAscii = 0: MsgBox "Sadece rakam girebilirsiniz.", vbExclamation, "Dikkat !"
    End Select
End Sub
Bu kodları uygulayın. Bu kodlar 0-9 arası sayıları ve virgülü girmeye müsade eder. Diğer karakterleri giremezsiniz. Fakat show modal false olduğu için focuslanma olmuyor gibi görünüyor. Ama cursor aslında nesne içindedir.
 
E

ExcelF1

Misafir
Userform'u şu şekilde kandırabiliyoruz :)

Private Sub TextBox9_Change()
If Me.TextBox9 <> "" Then
If Not IsNumeric(Me.TextBox9) Then
MsgBox "Sayısal değer giriniz"

For i = 1 To Len(Me.TextBox9)
kr = Mid(Me.TextBox9, i, 1)
If Not IsNumeric(kr) Then
Me.TextBox9.SelStart = 0
Me.TextBox9.SelLength = i - 1
sol = Me.TextBox9.SelText
Me.TextBox9.SelStart = i
Me.TextBox9.SelLength = Len(Me.TextBox9) - i
sag = Me.TextBox9.SelText
End If
Next
Me.TextBox9 = sol & sag

TextBox10.SetFocus
TextBox9.SetFocus



End If
End If
End Sub
 
Son düzenleme:
Üst