Variable not seen

G

Geoff

I cannot work out why the variable oStyle is not ‘seen’ by the message form’s
cmdOkNo_Click procedure. Should be simple but I've gone blank:

From a form I call a custom message box form which can have a combination of
Yes, No, Cancel or OK cmdbuttons. However I use only 3 buttons by switching
No and Ok on the same button. The messaging and configuring of the message
box is done in a module:

Public Function oMsgBox1(oStyle As String, oNumPrompts As Long, Prompt1 As
String, Prompt2 As String, Prompt3 As String, Prompt4 As String, Title As
String)

….code

End Function

The oStyle string can be “OK†or “YNC†or “YNâ€

oStyle, boMsgYes, boMsgNo, and boMsgCancel are declared globally elsewhere.

In the message form code I have:

Private Sub cmdOkNo_Click()
If oStyle = "YN" Or oStyle = "YNC" Then ''' oStyle remains ""
boMsgNo = True
End If
other stuff
End Sub

Private Sub cmdYes_Click()
boMsgYes = True
other stuff
End Sub

Private Sub cmdCancel_Click()
boMsgCancel = True
other stuff
End Sub

T.I.A.

Geoff
 
J

Jim Rech

oStyle, boMsgYes, boMsgNo, and boMsgCancel are declared globally
Maybe so but your function declares a local set of variables with the same
names:

You can go two ways at least-

1. Set the global values before calling Function oMsgBox1 and pass nothing
to it.
2. Set global versions of the local variables in the function:

Function oMsgBox1(...)
PuboStyle=oStyle

Btw, if your Function oMsgBox1 returns nothing, as it appears, it shouldn't
be a function. Make it a Sub.

--
Jim
|I cannot work out why the variable oStyle is not 'seen' by the message form's
| cmdOkNo_Click procedure. Should be simple but I've gone blank:
|
| From a form I call a custom message box form which can have a combination
of
| Yes, No, Cancel or OK cmdbuttons. However I use only 3 buttons by
switching
| No and Ok on the same button. The messaging and configuring of the message
| box is done in a module:
|
| Public Function oMsgBox1(oStyle As String, oNumPrompts As Long, Prompt1 As
| String, Prompt2 As String, Prompt3 As String, Prompt4 As String, Title As
| String)
|
| ..code
|
| End Function
|
| The oStyle string can be "OK" or "YNC" or "YN"
|
| oStyle, boMsgYes, boMsgNo, and boMsgCancel are declared globally
elsewhere.
|
| In the message form code I have:
|
| Private Sub cmdOkNo_Click()
| If oStyle = "YN" Or oStyle = "YNC" Then ''' oStyle remains ""
| boMsgNo = True
| End If
| other stuff
| End Sub
|
| Private Sub cmdYes_Click()
| boMsgYes = True
| other stuff
| End Sub
|
| Private Sub cmdCancel_Click()
| boMsgCancel = True
| other stuff
| End Sub
|
| T.I.A.
|
| Geoff
|
 
B

Bob Phillips

If oStyle is a global variable, why is it also an argument to oMsgBox?

What does oMsgBox do?

--
---
HTH

Bob


(there's no email, no snail mail, but somewhere should be gmail in my addy)
 
G

Geoff

But how would I pass parameters if I used a Sub instead of the current
function?

The message box can be called from a module or the main form for example:

oMsgBox1 _
oStyle:="OK", _
oNumPrompts:=2, _
Prompt1:="xxx is already open ...", _
Prompt2:="... cannot open another version", _
Prompt3:="", _
Prompt4:="", _
Title:="Formxxx"
LoadfrmMsgBox1

Geoff
 
G

Geoff

oMsgBox configures the message box ie width, height and shows the message and
required buttons. As the responses are needed elsewhere in the code I set
Boolean values to each button.

I have put the function in a module - should it be in the form code?

Geoff
 
J

Jim Rech

But how would I pass parameters if I used a Sub instead of the current
You can pass arguments to subs or functions. Their only difference is that
functions _return_ results.

--
Jim
| But how would I pass parameters if I used a Sub instead of the current
| function?
|
| The message box can be called from a module or the main form for example:
|
| oMsgBox1 _
| oStyle:="OK", _
| oNumPrompts:=2, _
| Prompt1:="xxx is already open ...", _
| Prompt2:="... cannot open another version", _
| Prompt3:="", _
| Prompt4:="", _
| Title:="Formxxx"
| LoadfrmMsgBox1
|
| Geoff
| "Jim Rech" wrote:
|
| > >>oStyle, boMsgYes, boMsgNo, and boMsgCancel are declared globally
| > >>elsewhere.
| >
| > Maybe so but your function declares a local set of variables with the
same
| > names:
| >
| > >>Function oMsgBox1(oStyle As String, oNumPrompts As Long, Prompt1 As
| > >>String, Prompt2 As String, Prompt3 As String, Prompt4 As String, Title
As
| > >>String)
| >
| > You can go two ways at least-
| >
| > 1. Set the global values before calling Function oMsgBox1 and pass
nothing
| > to it.
| > 2. Set global versions of the local variables in the function:
| >
| > Function oMsgBox1(...)
| > PuboStyle=oStyle
| >
| > Btw, if your Function oMsgBox1 returns nothing, as it appears, it
shouldn't
| > be a function. Make it a Sub.
| >
| > --
| > Jim
| > | > |I cannot work out why the variable oStyle is not 'seen' by the message
form's
| > | cmdOkNo_Click procedure. Should be simple but I've gone blank:
| > |
| > | From a form I call a custom message box form which can have a
combination
| > of
| > | Yes, No, Cancel or OK cmdbuttons. However I use only 3 buttons by
| > switching
| > | No and Ok on the same button. The messaging and configuring of the
message
| > | box is done in a module:
| > |
| > | Public Function oMsgBox1(oStyle As String, oNumPrompts As Long,
Prompt1 As
| > | String, Prompt2 As String, Prompt3 As String, Prompt4 As String, Title
As
| > | String)
| > |
| > | ..code
| > |
| > | End Function
| > |
| > | The oStyle string can be "OK" or "YNC" or "YN"
| > |
| > | oStyle, boMsgYes, boMsgNo, and boMsgCancel are declared globally
| > elsewhere.
| > |
| > | In the message form code I have:
| > |
| > | Private Sub cmdOkNo_Click()
| > | If oStyle = "YN" Or oStyle = "YNC" Then ''' oStyle remains ""
| > | boMsgNo = True
| > | End If
| > | other stuff
| > | End Sub
| > |
| > | Private Sub cmdYes_Click()
| > | boMsgYes = True
| > | other stuff
| > | End Sub
| > |
| > | Private Sub cmdCancel_Click()
| > | boMsgCancel = True
| > | other stuff
| > | End Sub
| > |
| > | T.I.A.
| > |
| > | Geoff
| > |
| >
| >
| >
 
B

Bob Phillips

As it is public, being in a module should not matter.

Where does the function get called, and with what values?

--
---
HTH

Bob


(there's no email, no snail mail, but somewhere should be gmail in my addy)
 
G

Geoff

The function can be called 14 locations altogether. For example:

Private Sub oApp_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)

'''check for open Form
If UserForms.Count > 0 Then
If UserForms(0).Name = "xxxx" Then
If fileToProcessName = ActiveWorkbook.Name Then
oMsgBox1 _
oStyle:="OK", _
oNumPrompts:=2, _
Prompt1:="You are about to close the workbook with
xxxx still open ...", _
Prompt2:="... please close xxxx first", _
Prompt3:="", _
Prompt4:="", _
Title:="Formxxx"
LoadfrmMsgBox1
Cancel = True
Exit Sub
End If
End If
End If
End Sub

or from a module
If Sheets.Count > 1 Then
oMsgBox1 _
oStyle:="YN", _
oNumPrompts:=2, _
Prompt1:="The workbook is about to be reconfigured", _
Prompt2:="Do you wish to continue ?", _
Prompt3:="", _
Prompt4:="", _
Title:="Formxxx"
LoadfrmMsgBox1
If Not boMsgYes Then Exit Sub
End If

or from the main form

Private Sub cmdExecute_Click()
oMsgBox1 _
oStyle:="OK", _
oNumPrompts:=4, _
Prompt1:="Records Processed", _
Prompt2:="Original = " & totalRecords, _
Prompt3:="Usable = " & finalRecords, _
Prompt4:="Removed = " & totalRecords - finalRecords, _
Title:="Formxxx"
LoadfrmMsgBox1
other stuff
End Sub

When I deleted oStyle as a global, oStyle in this became "Empty" instead of ""

Private Sub cmdOkNo_Click()
If oStyle = "YN" Or oStyle = "YNC" Then ''' oStyle remains ""
boMsgNo = True
End If
other stuff
End Sub

Geoff
 
G

Geoff

Hi Jim
I'll go with suggestion 2 and set PuboStyle = oStyle. It works fine in all
the differing scenarios where I call the function.

Many thanks

Geoff
 
G

Geoff

Thanks for your responses. I'll go with Jim's suggestion 2 PuboStyle =
oStyle in the function and delete oStyle as a global.

Geoff
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top