[ÇÖZÜLDÜ] Belirlenen Framedeki kontrollere bak muaf tutulanlardan ise atla

Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Aslında soruyu nasıl soracağımı bilemedim aşağıdaki kodlar işimi görüyor. Ancak Her frame için ayrı ayrı yapmak zorundayım. daha kısa yapmak mümkün mü?
Frameler = Array(Frame1,frame2,frame3)
MuafController = Array(ComboBox6, TextBox13, TextBox16)

Kod:
Sub BosTextCombo()
For Each Nsn In Frame1.Controls
    If TypeName(Nsn) = "TextBox" Or TypeName(Nsn) = "ComboBox" Then ' NESNENIN ADI YAZILACAK
        If Not Nsn.Name = "ComboBox6" Then
            Nsn.Locked = True
            Nsn.BackColor = &H80000011
            Nsn.Value = Empty
        End If
    End If
Next Nsn
For Each Nsn In Frame2.Controls
    If TypeName(Nsn) = "TextBox" Or TypeName(Nsn) = "ComboBox" Then ' NESNENIN ADI YAZILACAK
            Nsn.Locked = True
            Nsn.BackColor = &H80000011
            Nsn.Value = Empty
    End If
Next Nsn
For Each Nsn In Frame3.Controls
    If TypeName(Nsn) = "TextBox" Or TypeName(Nsn) = "ComboBox" Then ' NESNENIN ADI YAZILACAK
        If Not Nsn.Name = "TextBox13" Or Nsn.Name = "TextBox16" Then
            Nsn.Locked = True
            Nsn.BackColor = &H80000011
            Nsn.Value = Empty
        End If
    End If
Next Nsn
End Sub
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Düşünürken aşağıdaki yöntemi buldum daha kullanılışlısı var mı? yani 20 frame içinden 10 u kontrol edilecek onu kontrol edilmeyecekse bu yöntem baya karmaşık olurda :)
Kod:
Sub BosTextCombo()
For Each frm In Controls
    If (TypeName(frm) = "Frame") And (frm.Name = "Frame1" Or frm.Name = "Frame2" Or _
                                      frm.Name = "Frame3") Then
        For Each Nsn In frm.Controls
            If (TypeName(Nsn) = "TextBox" Or TypeName(Nsn) = "ComboBox") Then
                If Not Nsn.Name = "ComboBox6" And Not Nsn.Name = "TextBox13" And Not _
                       Nsn.Name = "TextBox16" Then
                    Nsn.Locked = True
                    Nsn.BackColor = &H80000011
                    Nsn.Value = Empty
                End If
            End If
        Next Nsn
    End If
Next frm
End Sub
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Frame'leri tek tek taramanız gerekmez. Aşağıdaki bir kod; Userform üzerindeki, muaf kontrolleri es geçerek diğerlerini değiştirir.

Kod:
Sub BosTextCombo()
    Dim ctrl As Control
    Dim i As Integer
    Dim bVarmi As Boolean
    Dim muafController As Variant
    
    muafController = Array("ComboBox6", "TextBox13", "TextBox16")
    
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.TextBox Or TypeOf ctrl Is MSForms.ComboBox Then
            
            For i = 0 To UBound(muafController)
                If CStr(ctrl.Name) = muafController(i) Then bVarmi = True
            Next i
                
            If Not bVarmi Then
                With ctrl
                    .Locked = True
                    .BackColor = &H80000011
                    .Value = Empty
                End With
            End If
            
            bVarmi = False
        End If
    Next
    
    Erase muafController
End Sub
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Ferhat hocam alakanıza teşekkür ederim. Ancak Fram4 ve 5 teki kontrolarrin tamamıda
muafController dizisinin elemanı olmak durumunda yada frame1,2,3 te işlem yapılmak zorunda.
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
O zaman, şunu deneyebilirsiniz.

frmler ve muafController dizilerini isteğinize göre düzenleyebilirsiniz.

Kod:
Sub BosTextCombo()
    Dim ctrl As Control
    Dim i As Integer
    Dim bFrmVarmi As Boolean
    Dim bVarmi As Boolean
    Dim muafController As Variant
    Dim frmler As Variant
    Dim frm As Frame
    Dim obj As Control
    
[COLOR=blue]    muafController = Array("ComboBox6", "TextBox13", "TextBox16")
    frmler = Array("Frame1", "Frame2", "Frame3")[/COLOR]
 
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.Frame Then
            
            For i = 0 To UBound(frmler)
                If ctrl.Name = frmler(i) Then bFrmVarmi = True
            Next i
            
            If bFrmVarmi Then
                
                Set frm = ctrl
                
                For Each obj In frm.Controls
                    If TypeOf obj Is MSForms.TextBox Or TypeOf obj Is MSForms.ComboBox Then
                        
                        For i = 0 To UBound(muafController)
                            If CStr(obj.Name) = muafController(i) Then bVarmi = True
                        Next i
                            
                        If Not bVarmi Then
                            With obj
                                .Locked = True
                                .BackColor = &H80000011
                                .Value = Empty
                            End With
                        End If
                        
                        bVarmi = False
                    End If
                Next
            End If
            
            bFrmVarmi = False
        End If
    Next
    
    Set frm = Nothing
    
    Erase muafController
    Erase frmler
End Sub
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
teşekkür ederim hocam.
 
Üst