2010-07-27 8 views
7

. Örneğinnasıl bir alt form denetimleri içeren bir form tüm kontrolleri döngü - subforms dahil formdaki tüm kontroller, döngü bu nasıl mümkün olduğunu Soruma önermek, başlığı olarak Access 2007

Ben

Public Sub colCtrlReq(frm As Form) 
' Sets background color for required field -> Tag = * 
Dim setColour As String 
setColour = RGB(255, 244, 164) 
Dim ctl As Control 
For Each ctl In frm.Controls 
     If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acListBox Then 
      If InStr(1, ctl.Tag, "*") <> 0 Then 
       ctl.BackColor = setColour 
      End If 
     End If 
Next ctl 
Set ctl = Nothing 
End Sub 

nasıl bir alt form denetimleri yakalamak için bunu değiştirmeyecektir etiketiyle * ile denetimlerin arka plan rengini ayarlamak için alt rutin altında kullanmak? Herhangi bir yardım veya işaretçi için şimdiden teşekkür ederiz.

Alkış Noel

+0

Diğerleri kullanabilirsiniz bizim soru cevap var, ama sen gerçekten bunun değişmesi için. Bir formun varsayılan koleksiyonu aslında Kontroller ve Alanlar koleksiyonunun bir birleşimi olduğundan, yazdıklarınız beklenmedik sonuçlar verebilir. –

+0

Cheers David tavsiyeden dolayı teşekkürler, yukarıdaki kodu düzelttim. – noelmcg

+0

Re yorum ** "Her ctl In frm" ** - Access 2010 ile bu sorunu yeniden oluşturamadım. – Fionnuala

cevap

12

çağırmayı bir

Public Sub colCtrlReq(frm As Form) 
'' Sets background color for required field -> Tag = * 
Dim setColour As String 
setColour = RGB(255, 244, 164) 
Dim ctl As Control 
For Each ctl In frm 
     If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox _ 
      Or ctl.ControlType = acListBox Then 
      If InStr(1, ctl.Tag, "*") <> 0 Then 
       ctl.BackColor = setColour 
      End If 
     ElseIf ctl.ControlType = acSubform Then 
      colCtrlReq frm(ctl.Name).Form 

     End If 
Next ctl 
Set ctl = Nothing 
End Sub 
+0

Nice one Remou, tıpkı benim takip ettiğim teknik gibi. – noelmcg

+0

@Remou [bu amacına ulaşır] (http://stackoverflow.com/a/14415188/1389394)? :-) – bonCodigo

+0

Harika cevap. Frm (ctl.Name) .Form '' u ctl.Form '(Access 2016'da doğrulandı) için basitleştirebileceğinizi farkettim. – MarredCheese

1

Erişim alt form denetiminin Formu özelliğinin kontrolleri koleksiyonu. Dikkat

, alt form denetimi adı kaydedildi şekilde nesnenin adı olarak aynı olmayabilir.

senin alt form kontrol SubformControlName adlı edilirse, buradan başlayın:

For Each ctl In frm!SubformControlName.Form.Controls 
    Debug.Print ctl.Name 
Next 

Güncelleme: Yorumlarınız itibaren, burada aradığınızı bence bu.

Eğer önceden alt form denetimi (lar) ın ad (lar) bilmiyorsanız, çalıştırma sırasında alt form kontroller formunuzun kontrollerin hangi belirleyebilir. için "frm.Controls olarak her bir CTL için" - "frm olarak her bir CTL İçin":

For Each ctl In frm.Controls 
    If TypeName(ctl) = "SubForm" Then 
     Debug.Print ctl.Name & " is a SubForm" 
     For Each ctlSub in ctl.Form.Controls 
      Debug.Print ctlSub.Name 
     Next 
    End If 
Next 
+2

Cheers HAnsUp. Bir formdaki alt formların adına (muhtemelen adlarına) sahip olmadıysanız, denetimlerden nasıl geçersiniz? – noelmcg

İlgili konular