Re: Checking Options in UserForms Collection



This layout version of the code works almost perfectly!

' in the User Form's code *** : frmOptSelect
Private Sub btnOpen_Click ()
................................................
CheckOptions Me 'notice the argument Me
...............................................
End Sub

' in a standard module
Sub CheckOptions (myForm As UserForm)
Dim myOption As Control
Dim myFlag As Integer
......................................................
' check if an option is selected in frame grpSeries (among the frame enabled
options)
For Each myOption In myForm.grpSeries.Controls
......If myOption.Enabled = True Then
.............If myOption.Value = True Then myFlag = 1
......End If
Next myOption
If myFlage <> 1 Then MsgBox "Select B- or GEL-Series" : myOption.SetFocus
.......................................................
' repeat for all frames on the form
.......................................................
End Sub

The message box prompt now displays, but followed by:
......."Run-time error '91': Object variable or With block variable not set"
and myOption.SetFocus statement is highlighted.

How to Set the control variable myOption?

Thanks again.



"monir" wrote:

> Partick;
>
> There are 2 reasons (I thought) for having a separate macro code for the task:
> 1. it makes the form's code neater, specially if other frames are added
> later to the form and their options need to be similarly cheked; and
> 2. in the case of multiple user forms, only the standard module's code
> needs to be expanded
>
> Now, if you meant to place the regular macro in the form's code ***, not
> just the macro's code, then here it is. I moved the macro Sub CheckOptions
> () to the form's code ***, and replaced UserForms(1) reference by Me (and
> later by nothing).
> Clicking the btnOpen button, which has the call to the CheckOptions macro
> (as illustrated below), does not produce run-time errors, and does not
> display the MsgBox message!! Stepping into the macro suggests that the
> message should be displayed !
> Maybe I should follow the MsgBox statement by SetFocous on the relevant
> option! or maybe not ! Is it the regular macro in the Class-Module Forms
> code *** that is causing all these troubles ?
>
> Here is the latest attempt, with all macros in the form's code ***:
> frmOptSelect
>
> Private Sub btnOpen_Click ()
> ...............................................
> CheckOptions
> ..............................................
> End Sub
>
> Sub CheckOptions()
> Dim myOption As Control
> Dim myFlag As Integer
> .....................................................
> ' check options in frame grpSeries
> For Each myOption In Me.grpSeries.Controls
> .....If myOption.Value = True Then myFlag = 1
> Next myOption
> If myFlage <> 1 Then MsgBox "Select B- or GEL-Series"
> ......................................................
> ' repeat for all frames
> ......................................................
>
> Other suggestions? Thank you.
>
>
>
> "Patrick Molloy" wrote:
>
> > I didn't realise that the code was in a module. I assumed that you'd used
> > the form's own code ***. Why don't you?
> >
> > "monir" <monir@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
> > news:1032AD94-99F2-4683-86EF-06A0473AF553@xxxxxxxxxxxxxxxx
> > > In the For Each statement:
> > > ' check options in frame grpSeries
> > > ......For Each myOption In UserForms(1).grpSeries.Controls
> > >
> > > if I replace UserForms(1) by UserForm("frmOptSelect")
> > > now it is "Run-time error '13': Type mismatch", and the For Each statement
> > > is highlighted. (That is different from the earlier: "Run-time error '9':
> > > Subscript out of range" when I used the user form index.)
> > >
> > > Does this reveal anything?
> > >
> > > Since I'm referring to the user form object in a standard macro, shouldn't
> > > the reference to the user form be specific either by index or by name ?
> > >
> > > Thanks again.
> > >
> > >
> > > "monir" wrote:
> > >
> > >> Patrick;
> > >>
> > >> Replacing UserForms(1). by Me. produced:
> > >> ........"Compile error: Invalid use of Me keyword"
> > >>
> > >> Another suggestion? Thank you.
> > >>
> > >>
> > >>
> > >> "Patrick Molloy" wrote:
> > >>
> > >> > probably zero basedinstead of
> > >> > UserForms(1).
> > >> > try
> > >> > me.
> > >> >
> > >> >
> > >> >
> > >> >
> > >> > "monir" wrote:
> > >> >
> > >> > > Hi;
> > >> > >
> > >> > > The user form, frmOptSelect, has a number of frames, each with a
> > >> > > number of
> > >> > > option controls. The algoritms for all combinations of options are
> > >> > > not
> > >> > > currently available, so I'm disabling certain options for now.
> > >> > > I'm trying to make sure that an option is selected in each frame on
> > >> > > the form
> > >> > > before I click the btnOpen button. In:
> > >> > >
> > >> > > Private Sub btnOpen_Click () event procedure and right at the top,
> > >> > > I
> > >> > > inserted:
> > >> > > ....... CheckOptions
> > >> > > which is a regular macro:
> > >> > >
> > >> > > Sub CheckOptions()
> > >> > > Dim myOption As Control
> > >> > > Dim myFlag As Integer
> > >> > > .....................................................
> > >> > > ' check options in frame grpSeries
> > >> > > For Each myOption In UserForms(1).grpSeries.Controls
> > >> > > .....If myOption.Value = True Then myFlag = 1
> > >> > > Next myOption
> > >> > > If myFlage <> 1 Then MsgBox "Select B- or GEL-Series"
> > >> > > ......................................................
> > >> > > ' repeat for all frames
> > >> > > ......................................................
> > >> > >
> > >> > > I got " Run-time error '9': Subscript out of range", and the above
> > >> > > For Each
> > >> > > statement is higlighted!
> > >> > >
> > >> > > Any suggestions ? Thank you
> >
> >
> >
.