If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below. |
|
|
|
Thread Tools | Display Modes |
#11
|
|||
|
|||
looping through controls - for each ... next
Sorry it was untested and I'd meant to add a Exit For line see below which
should work: Dim ctl As Control If Me.cboColor = "Yes" Then For Each ctl In Me.Controls If ctl.Tag = "Col" Then ctl.Enabled = True End If Next Else For Each ctl In Me.Controls If ctl.Tag = "Col" Then If ctl.Value = True Then If MsgBox("All related check boxes will be unchecked - is this OK?", vbExclamation + vbYesNo) = vbNo Then Me.cboColor = "Yes" Exit Sub Else Exit For End If End If End If Next For Each ctl In Me.Controls If ctl.Tag = "Col" Then ctl.Value = Null ctl.Enabled = False End If Next End If Jon "Kurt Heisler" wrote in message ... On May 20, 10:36 am, "Jon Lewis" wrote: Yes I think you do need another For Next loop if you are going to warn the user *only* if any of the CheckBoxes are checked not least because your logic at the moment leaves previously unchecked CheckBoxes disabled. Why not warn them anyway something like "Any related checked boxes will be unchecked ." I've assumed you want all related CheckBoxes to remain Enabled. Try the following: Dim ctl As Control If Me.cboColor = "Yes" Then For Each ctl In Me.Controls If ctl.Tag = "Col" Then ctl.Enabled = True End If Next Else For Each ctl In Me.Controls If ctl.Tag = "Col" Then If ctl.Value = True Then If MsgBox("All related check boxes will be unchecked - is this OK?", vbExclamation + vbYesNo) = vbNo Then Me.cboColor = "Yes" Exit Sub End If End If End If Next For Each ctl In Me.Controls If ctl.Tag = "Col" Then ctl.Value = Null ctl.Enabled = False End If Next End If Jon "Kurt Heisler" wrote in message ... If the user checks selects 'Yes' from a combo box, I'd like to enable a group of check boxes (all have tag property "col"). If the user selects 'No', I'd like to disable them but, if any are checked, tell the user data will be deleted and then set the checkboxes = Null (assuming the user says okay). My current code triggers the prompt for *each* check box that's checked, rather then looping through them automatically. Do I need to another "For each ..." clause after the first Else statement? ### Private Sub cboColor_AfterUpdate() For Each ctl In Me If ctl.Tag = "col" Then If Me.cboColor.Value = "Yes" Then ctl.Enabled = True Else If ctl.Value = False Then 'nothing has been checked; disable the controls ctl.Enabled = False Else 'something has been checked; tell user it will be deleted iresponse = MsgBox("Changing this from Yes will delete the information in the " & _ "related fields." & _ Chr(13) & Chr(13) & "Continue?", 4 + 48 + 256, "Delete confirmation") If iresponse = 7 Then ' user said No Me.cboColor.Value = "Yes" Exit Sub Else ' user said Yes ctl.Value = Null ctl.Enabled = False End If End If End If End If Next Set ctl = Nothing End Sub ### Thank you. Jon: Your code has the same problem mine has: It prompts the user for *each* checkbox that's = True. (So if 3 checkboxes are checked, he gets asked 3 times, "... is this OK?") mie: I can't follow how your code comes together. I ignored the first code you posted, and you came back with this: Dim ctl As control For Each ctl In Me.Controls If ctl.Tag = "Col" Then If Me.cboColor = "Yes" Then ctl.enabled = True Else If ctl.value = True Then ctl.value = False ctl.enabled = False End If End If Next So where / how do I incorporate the iresponse ... question for the user? The above code will change all True checkboxes to False without first asking the user. Also: For me, i will ask user confirmation once only. Then proceed the cancellation process. Imagine if you have 10 check boxes, user will be prompted 10 time for confirmation. That's the problem I'm trying to fix. If I can have Access loop through the controls automatically it should mean the user gets one prompt and not, e.g., 10. |
#12
|
|||
|
|||
looping through controls - for each ... next
Thanks Jon. Works perfectly.
On May 21, 4:40*am, "Jon Lewis" wrote: Sorry it was untested and I'd meant to add a Exit For line see below which should work: Dim ctl As Control If Me.cboColor = "Yes" Then * * For Each ctl In Me.Controls * * * * If ctl.Tag = "Col" Then * * * * * * ctl.Enabled = True * * * * End If * * Next Else * * For Each ctl In Me.Controls * * * * If ctl.Tag = "Col" Then * * * * * * If ctl.Value = True Then * * * * * * * * If MsgBox("All related check boxes will be unchecked - is this OK?", vbExclamation + vbYesNo) = vbNo Then * * * * * * * * * * Me.cboColor = "Yes" * * * * * * * * * * Exit Sub * * * * * * * * Else * * * * * * * * * * Exit For * * * * * * * * End If * * * * * * End If * * * * End If * * Next * * For Each ctl In Me.Controls * * * * If ctl.Tag = "Col" Then * * * * * * ctl.Value = Null * * * * * * ctl.Enabled = False * * * * End If * * Next *End If Jon "Kurt Heisler" wrote in message ... On May 20, 10:36 am, "Jon Lewis" wrote: Yes I think you do need another For Next loop if you are going to warn the user *only* if any of the CheckBoxes are checked not least because your logic at the moment leaves previously unchecked CheckBoxes disabled. Why not warn them anyway something like "Any related checked boxes will be unchecked ." I've assumed you want all related CheckBoxes to remain Enabled. Try the following: Dim ctl As Control If Me.cboColor = "Yes" Then For Each ctl In Me.Controls If ctl.Tag = "Col" Then ctl.Enabled = True End If Next Else For Each ctl In Me.Controls If ctl.Tag = "Col" Then If ctl.Value = True Then If MsgBox("All related check boxes will be unchecked - is this OK?", vbExclamation + vbYesNo) = vbNo Then Me.cboColor = "Yes" Exit Sub End If End If End If Next For Each ctl In Me.Controls If ctl.Tag = "Col" Then ctl.Value = Null ctl.Enabled = False End If Next End If Jon "Kurt Heisler" wrote in message ... If the user checks selects 'Yes' from a combo box, I'd like to enable a group of check boxes (all have tag property "col"). If the user selects 'No', I'd like to disable them but, if any are checked, tell the user data will be deleted and then set the checkboxes = Null (assuming the user says okay). My current code triggers the prompt for *each* check box that's checked, rather then looping through them automatically. Do I need to another "For each ..." clause after the first Else statement? ### Private Sub cboColor_AfterUpdate() For Each ctl In Me If ctl.Tag = "col" Then If Me.cboColor.Value = "Yes" Then ctl.Enabled = True Else If ctl.Value = False Then 'nothing has been checked; disable the controls ctl.Enabled = False Else 'something has been checked; tell user it will be deleted iresponse = MsgBox("Changing this from Yes will delete the information in the " & _ "related fields." & _ Chr(13) & Chr(13) & "Continue?", 4 + 48 + 256, "Delete confirmation") If iresponse = 7 Then ' user said No Me.cboColor.Value = "Yes" Exit Sub Else ' user said Yes ctl.Value = Null ctl.Enabled = False End If End If End If End If Next Set ctl = Nothing End Sub ### Thank you. Jon: Your code has the same problem mine has: It prompts the user for *each* checkbox that's = True. (So if 3 checkboxes are checked, he gets asked 3 times, "... is this OK?") mie: I can't follow how your code comes together. I ignored the first code you posted, and you came back with this: Dim ctl As control For Each ctl In Me.Controls * *If ctl.Tag = "Col" Then * * * *If Me.cboColor = "Yes" Then * * * * * *ctl.enabled = True * * * *Else * * * * * *If ctl.value = True Then ctl.value = False * * * * * *ctl.enabled = False * * * *End If * *End If Next So where / how do I incorporate the iresponse ... question for the user? The above code will change all True checkboxes to False without first asking the user. Also: For me, i will ask user confirmation once only. Then proceed the cancellation process. Imagine if you have 10 check boxes, user will be prompted 10 time for confirmation. That's the problem I'm trying to fix. If I can have Access loop through the controls automatically it should mean the user gets one prompt and not, e.g., 10. |
|
Thread Tools | |
Display Modes | |
|
|