UserForm' da bir kodun tüm textbox' lara uygulanması

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,056
Excel Vers. ve Dili
Office 2013 İngilizce
Merhabalar,
Bir Userform' da 40 civarında TextBox mevcut, aşağıdaki kodları tüm textbox' lara yazmak yerine; tek bir defada yazarak bütün TextBox' lara uygulanmasını nasıl sağlayabiliriz?


Kod:
Private Sub TextBox1_Enter()
TextBox1.BackColor = RGB(200, 220, 255)
End Sub
Kod:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1.BackColor = vbWhite
End Sub
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Linkteki gibi Class Module kullanın....


.
 

Mahmut Bayram

Özel Üye
Katılım
25 Haziran 2005
Mesajlar
1,778
Excel Vers. ve Dili
2016 Excel Tr
Linkteki gibi Class Module kullanın....


.
Haluk bey, kusura bakmayın görmemişim.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,056
Excel Vers. ve Dili
Office 2013 İngilizce
Ekteki örneği inceleyiniz.
Linkteki gibi Class Module kullanın....


.
Sn Haluk Hocam verdiğiniz linkteki örneklere Class Module aşağıdaki kodu yazdım, olmadı.

örnek üzerinde düzenleyebilirmisiniz,
Çok Teşekkürler,

Kod:
Private Sub txt_Enter()
txt.BackColor = RGB(200, 220, 255)
End Sub
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,349
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Sn Haluk Hocam verdiğiniz linkteki örneklere Class Module aşağıdaki kodu yazdım, olmadı.

örnek üzerinde düzenleyebilirmisiniz,
Çok Teşekkürler,

Kod:
Private Sub txt_Enter()
txt.BackColor = RGB(200, 220, 255)
End Sub
Class module ile TextBox Enter veya Exit olayları görünmez olduğundan bu olaylar kullanılamaz.
İnternette bu problem için önerilen en ideal çözüm olarak sonsuz döngü (Do-Loop) önerilmiş. Ancak bu da Excel uygulamasının CPU kullanımını %20 civarına çıkarır.

Bu problemi çözmenin en iyi yolu, Windows pencere mesajlarını dinleyerek renklendirmektir. Bununla ilgili örnek ekleyeceğim.

.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Hmmmm....... Class Module TextBox'larda Enter ve Exit olaylarını desteklemiyor.....

İşinize yararsa, aşağıdakileri deneyin;

UserForm modülü:

Kod:
Private Sub UserForm_Initialize()
    Dim i As Byte
    
    For Each MyCtrl In Me.Controls
        If TypeName(MyCtrl) = "TextBox" Then
            i = i + 1
            ReDim Preserve TxtBx(i)
            Set TxtBx(i).txt = MyCtrl
        End If
    Next
End Sub

Class1 Modülü:

Kod:
Public WithEvents txt As MSForms.TextBox
'
Private Sub txt_Change()
    txt.BackColor = RGB(200, 220, 255)
End Sub
'
Private Sub txt_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    txt.BackColor = vbWhite
End Sub
.
 
Son düzenleme:

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,056
Excel Vers. ve Dili
Office 2013 İngilizce
Hmmmm....... Class Module TextBox'larda Enter ve Exit olaylarını desteklemiyor.....

İşinize yararsa, aşağıdakileri deneyin;

UserForm modülü:

Kod:
Dim TxtBx() As New Class1
'
Private Sub UserForm_Initialize()
    Dim i As Byte
   
    For Each MyCtrl In Me.Controls
        If TypeName(MyCtrl) = "TextBox" Then
            i = i + 1
            ReDim Preserve TxtBx(i)
            Set TxtBx(i).txt = MyCtrl
            i = i + 1
        End If
    Next
End Sub

Class1 Modülü:

Kod:
Public WithEvents txt As MSForms.TextBox
'
Private Sub txt_Change()
    txt.BackColor = RGB(200, 220, 255)
End Sub
'
Private Sub txt_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    txt.BackColor = vbWhite
End Sub
.
Haluk Hocam teşekkürler,
tam olmasa da 70-80% işe yarıyor,

iyi çalışmalar.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
100 % için Zeki Beyi beklemek lazım, herhalde ...

.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,056
Excel Vers. ve Dili
Office 2013 İngilizce
100 % için Zeki Beyi beklemek lazım, herhalde ...

.
Zeki Beyi bekleyebiliriz,
Aslında Mahmut Bayram hocamın verdiği örnekte; kodları MultiPage' e uygulayabilsek sıkıntı büyük ölçüde çözülecek gibi duruyor.

Kod:
rnk = True
Do While rnk
   DoEvents
   If Not Ctrl Is Me.ActiveControl Then
      txtcolor vbWhite
      Set Ctrl = Me.ActiveControl
      txtcolor RGB(200, 220, 255)
      End If
   Loop
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
O zaman; @Mahmut Bayram 'ın izniyle, kendisinin verdiği kodu revize edersek şimdilik işinizi görür....


Kod:
Dim Ctrl As MSForms.Control, rnk As Boolean
'
Private Sub UserForm_Activate()
    rnk = True
    Do While rnk
        DoEvents
        If Not Ctrl Is Me.MultiPage1.Pages(Me.MultiPage1.Value).ActiveControl Then
              txtcolor vbWhite
              Set Ctrl = Me.MultiPage1.Pages(Me.MultiPage1.Value).ActiveControl
              txtcolor RGB(200, 220, 255)
        End If
    Loop
End Sub
'
Private Sub txtcolor(renk As Long)
    If Ctrl Is Nothing Then Exit Sub
    If TypeName(Ctrl) <> "TextBox" Then Exit Sub
    Ctrl.Object.BackColor = renk
End Sub
'
Private Sub UserForm_Terminate()
    End
End Sub
.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,056
Excel Vers. ve Dili
Office 2013 İngilizce
O zaman; @Mahmut Bayram 'ın izniyle, kendisinin verdiği kodu revize edersek şimdilik işinizi görür....


Kod:
Dim Ctrl As MSForms.Control, rnk As Boolean
'
Private Sub UserForm_Activate()
    rnk = True
    Do While rnk
        DoEvents
        If Not Ctrl Is Me.MultiPage1.Pages(Me.MultiPage1.Value).ActiveControl Then
              txtcolor vbWhite
              Set Ctrl = Me.MultiPage1.Pages(Me.MultiPage1.Value).ActiveControl
              txtcolor RGB(200, 220, 255)
        End If
    Loop
End Sub
'
Private Sub txtcolor(renk As Long)
    If Ctrl Is Nothing Then Exit Sub
    If TypeName(Ctrl) <> "TextBox" Then Exit Sub
    Ctrl.Object.BackColor = renk
End Sub
'
Private Sub UserForm_Terminate()
    End
End Sub
.
Sn Haluk Hocam çok teşekkürler,
aynı durumu ComboBox için de yapmak için nasıl bir düzenleme yapılabilir?

iyi çalışmalar.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Eskisinin yerine, aşağıdakini kullanın...

Kod:
Private Sub txtcolor(renk As Long)
    If Ctrl Is Nothing Then Exit Sub
    If TypeName(Ctrl) <> "TextBox" And TypeName(Ctrl) <> "ComboBox" Then Exit Sub
    Ctrl.Object.BackColor = renk
End Sub
.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,056
Excel Vers. ve Dili
Office 2013 İngilizce
Eskisinin yerine, aşağıdakini kullanın...

Kod:
Private Sub txtcolor(renk As Long)
    If Ctrl Is Nothing Then Exit Sub
    If TypeName(Ctrl) <> "TextBox" And TypeName(Ctrl) <> "ComboBox" Then Exit Sub
    Ctrl.Object.BackColor = renk
End Sub
.
Sn Haluk hocam çok teşekkür ederim.
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
3,056
Excel Vers. ve Dili
Office 2013 İngilizce
Hmmmm....... Class Module TextBox'larda Enter ve Exit olaylarını desteklemiyor.....

İşinize yararsa, aşağıdakileri deneyin;
Class1 Modülü:

Kod:
Public WithEvents txt As MSForms.TextBox
'
Private Sub txt_Change()
    txt.BackColor = RGB(200, 220, 255)
End Sub
'
Private Sub txt_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    txt.BackColor = vbWhite
End Sub
.
Haluk Hocam merhaba,
Ekli görselde görüleceği üzere Userformda 15 satır , 8 Sutundan oluşan Textbox dizisi mevcut, mouse Bu textbox' ların herhangi birinin üzerine geldiği zaman onun arka planın kırmızı' ya boyamasını istiyordum.
ilk başta mouse başka textbox' a geçince bir öncekinin rengi de kırmızı kaldığı için Class Moduşe içine aşağıdaki kod dizisini oluşturudum.
Aslında bu kod dizisi çalışıyor, yalnız biraz hantal oldu, yavaş çalışıyor.
Bunu daha hızlandırmanın yada pratik bir yöntemi olur mu?

ilginiz için şimdiden teşekkürler,

iyi pazarlar.


Kod:
Public WithEvents TxtGrp As MSForms.TextBox
 
Private Sub TxtGrp_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
   Dim strLB As String
   
   strLB = TxtGrp.Name
    
   If TxtGrp = "" Then Exit Sub
   
      Call txtMouseDown(strLB)
   
    TxtGrp.BackColor = vbRed
    TxtGrp.ForeColor = vbWhite
    TxtGrp.Font.Bold = True
         
End Sub
Kod:
Private Sub txtMouseDown(LbName As String)
Dim myCtrl As MSForms.Control
    
    For Each myCtrl In frmSiparisIE24.Controls
        If TypeName(myCtrl) = "TextBox" Then
            If Left(myCtrl.Name, 5) = "TxtBx" Then
                If LCase(myCtrl.Name) Like "*sevk*" Then
                    If myCtrl.BackColor = vbRed Then
                        If myCtrl.Name <> LbName Then
                    
                            myCtrl.ForeColor = vbBlack
                            myCtrl.Font.Bold = False
                            myCtrl.BackColor = vbWhite

                        End If
                    End If
                End If
            End If
            
        End If
    Next

End Sub
 

Ekli dosyalar

Üst