From: Jon Lewis on 21 May 2010 04:40 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" <heislerkurt(a)gmail.com> wrote in message news:939ee0f0-7034-4b95-9e45-40973e5ba5e7(a)s13g2000prc.googlegroups.com... On May 20, 10:36 am, "Jon Lewis" <jon.le...(a)cutthespambtinternet.com> 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" <heislerk...(a)gmail.com> wrote in message > > news:de29a19f-5e2a-493d-a197-e4aabf3d790a(a)y6g2000pra.googlegroups.com... > > > 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.
From: Kurt Heisler on 21 May 2010 22:33 Thanks Jon. Works perfectly. On May 21, 4:40 am, "Jon Lewis" <jon.le...(a)cutthespambtinternet.com> 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" <heislerk...(a)gmail.com> wrote in message > > news:939ee0f0-7034-4b95-9e45-40973e5ba5e7(a)s13g2000prc.googlegroups.com... > On May 20, 10:36 am, "Jon Lewis" <jon.le...(a)cutthespambtinternet.com> > 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" <heislerk...(a)gmail.com> wrote in message > > >news:de29a19f-5e2a-493d-a197-e4aabf3d790a(a)y6g2000pra.googlegroups.com... > > > > 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.
First
|
Prev
|
Pages: 1 2 3 Prev: should i hide a form or make it modal Next: subform for inputting grades not working |