• DİKKAT

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

Private Sub TextBox3_Exit sorunu

  • Konbuyu başlatan Konbuyu başlatan ikikan
  • Başlangıç tarihi Başlangıç tarihi
Katılım
3 Mart 2009
Mesajlar
519
Excel Vers. ve Dili
excel 2003 tr
arkadaşlar "Private Sub TextBox3_Exit ...." komutunu 60 tane textbox a uyguladım ama 60 kere " Private Sub TextBox1.2.3..._Exit..... " uygulamak zorunda kaldım acaba bunu kısaltmanın bir yolu yokmu ..


örnek kod

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
CommandButton1_Click
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
CommandButton1_Click
End Sub
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
CommandButton1_Click
End Sub
 
Textbox isimleri textbox1, textbox2, textbox3, ............... şeklinde sıralı olarakmı gidiyor.
 
Bu işlemi kısaltmak için class modül kullanabilirsiniz. Ancak class modülde exit olayı yoktur. Bu sebeple benzer etkiyi mousedown ve keydown olaylarını birlikte kullanarak elde etmek mümkündür. Aşağıda belirteceğim açıklamaları projenizde uygulayın.

1- Userformun kod modülünde commandbutton1 için yazılı olan olayı aşağıdaki gibi tanımlayın.

Kod:
[COLOR=Red][B]Private [/B][/COLOR]Sub CommandButton1_Click()
yerine

Kod:
[B][COLOR=Red]Public [/COLOR][/B]Sub CommandButton1_Click()
2- VB editöründe bir class modül oluşturun ve aşağıdaki kodları bu modüle kopyalayın.

Kod:
Public WithEvents txt As MSForms.TextBox

Private Sub txt_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
UserForm1.CommandButton1_Click
End Sub

Private Sub txt_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
UserForm1.CommandButton1_Click
End Sub
3- Userformun kod modülünün en başına aşağıdaki satırı ilave edin.

Kod:
Dim txt(60) As New Class1
4- Userformun initialize olayına aşağıdaki satırları yazın.

Kod:
Private Sub UserForm_Initialize()
For a = 1 To 60
Set txt(a).txt = Controls("textbox" & a)
Next
End Sub
Not: Eğer uygulamanızda başka class modüller varsa yukarıda verdiğim kodlarda yeni ilave edilecek class modülün ismini kullanın. Ayrıca textboxlara yazdığınız 60 adet exit olayınıda tamamen silin.
 
Bu işlemi kısaltmak için class modül kullanabilirsiniz. Ancak class modülde exit olayı yoktur. Bu sebeple benzer etkiyi mousedown ve keydown olaylarını birlikte kullanarak elde etmek mümkündür. Aşağıda belirteceğim açıklamaları projenizde uygulayın.

1- Userformun kod modülünde commandbutton1 için yazılı olan olayı aşağıdaki gibi tanımlayın.

Kod:
[COLOR=Red][B]Private [/B][/COLOR]Sub CommandButton1_Click()
yerine

Kod:
[B][COLOR=Red]Public [/COLOR][/B]Sub CommandButton1_Click()
2- VB editöründe bir class modül oluşturun ve aşağıdaki kodları bu modüle kopyalayın.

Kod:
Public WithEvents txt As MSForms.TextBox

Private Sub txt_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
UserForm1.CommandButton1_Click
End Sub

Private Sub txt_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
UserForm1.CommandButton1_Click
End Sub
3- Userformun kod modülünün en başına aşağıdaki satırı ilave edin.

Kod:
Dim txt(60) As New Class1
4- Userformun initialize olayına aşağıdaki satırları yazın.

Kod:
Private Sub UserForm_Initialize()
For a = 1 To 60
Set txt(a).txt = Controls("textbox" & a)
Next
End Sub
Not: Eğer uygulamanızda başka class modüller varsa yukarıda verdiğim kodlarda yeni ilave edilecek class modülün ismini kullanın. Ayrıca textboxlara yazdığınız 60 adet exit olayınıda tamamen silin.

hata veriyor neden acaba ?
 
Uygulamada bir hatanız vardır. Yukarıda yazdıklarımı birebir uyguladığınızdan emin olun. Ayrıca mesajımın en altında yazan not kısmınıda okumayı unutmayın.
 
Uygulamada bir hatanız vardır. Yukarıda yazdıklarımı birebir uyguladığınızdan emin olun. Ayrıca mesajımın en altında yazan not kısmınıda okumayı unutmayın.
hatayı veren kırmızı rekli komut silersem CommandButton1 kodu işlemiyor

Dim txt(60) As New Class1
Option Explicit

Private Sub UserForm_Initialize()
For a = 1 To 60
Set txt(a).txt = Controls("textbox" & a)
Next
End Sub

Public Sub CommandButton1_Click()
Dim bt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, r, s, t, u, v, Y, z, X, w, aa, ab, ac, ad, ae
bt = TextBox1.Text
a = TextBox2.Text
b = TextBox3.Text
c = TextBox4.Text
d = TextBox5.Text
e = TextBox6.Text
f = TextBox7.Text
g = TextBox8.Text
h = TextBox9.Text
i = TextBox10.Text
j = TextBox11.Text
k = TextBox12.Text
l = TextBox13.Text
m = TextBox14.Text
n = TextBox15.Text
o = TextBox16.Text
p = TextBox17.Text
r = TextBox18.Text
s = TextBox19.Text
t = TextBox20.Text
u = TextBox21.Text
v = TextBox22.Text
Y = TextBox23.Text
z = TextBox24.Text
X = TextBox25.Text
w = TextBox26.Text

aa = TextBox34.Text
ab = TextBox35.Text
ac = TextBox36.Text
ad = TextBox46.Text

If a < b And d = "0" Then
TextBox52 = Val(a) * "0,55" + Val(b) + Val(c) * "0,45"
ElseIf a < b And d > "0" Then
TextBox52 = Val(a) * "0,55" + Val(b) + Val(c)
ElseIf b = "0" Then
TextBox52 = Val(a)
ElseIf c = "0" Then
TextBox52 = Val(b) * "0,45" + Val(a)
ElseIf d = "0" Then
TextBox52 = Val(a) + Val(b)
ElseIf e = "0" Then
TextBox52 = Val(a) + Val(b) + Val(c) * "0,45"
ElseIf f = "0" Then
TextBox52 = Val(a) + Val(b) + Val(c)
ElseIf g = "0" Then
TextBox52 = Val(a) + Val(b) + Val(c) + Val(d) * "0,45"
ElseIf g > "0" Then
TextBox52 = Val(a) + Val(b) + Val(c) + Val(d)
End If
'........ ağırlık formulü


TextBox31 = Val(a) + Val(b) + Val(c) + Val(d) + Val(e) + Val(f) + Val(g)
TextBox40 = Val(p) + Val(r) + Val(s) + Val(t) + Val(u) + Val(v) + Val(Y) + Val(z)
TextBox41 = Val(p) + Val(r) + Val(s) + Val(t) + Val(u) + Val(v) + Val(Y) + Val(z) - Val(aa) - Val(ab)
TextBox42 = Val(p) + Val(r) + Val(s) + Val(t) + Val(u) + Val(v) + Val(Y) + Val(z) - Val(ab)
TextBox43 = Val(aa) + Val(ab)
TextBox46 = X
TextBox47 = Val(p) + Val(r) + Val(s) + Val(t) + Val(u) + Val(v) + Val(Y) + Val(z) - Val(ad)

TextBox50 = Val(ab) - Val(ac)

End Sub
 
Option Explicit komutunun silinmesi doğru olur. Ayrıca bu komutun silinmesinin CommandButton1 ile hiç bir bağlantısı yoktur. Bence siz dosyanızın bir örneğini ekleyin.
 
Private Sub UserForm_Activate()
olayından
Private Sub UserForm_Initialize()
geçinçe bir iki düzeltme yapmam gerekti
düzeltmeleri yapınca düzeldi teşekür ederim
lakin bu 2007 ve 2003 versiyonlarında sorun verirmi ?
 
Geri
Üst