• DİKKAT

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

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

  • Konbuyu başlatan Konbuyu başlatan hsayar
  • Başlangıç tarihi Başlangıç tarihi
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
 
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
 
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
 
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:
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
 
teşekkür ederim hocam.
 
Geri
Üst