ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Pass control to a function/subroutine (https://www.excelbanter.com/excel-programming/402524-pass-control-function-subroutine.html)

Dale Fye

Pass control to a function/subroutine
 
I want to popup a shortcut menu whenever a user right clicks in a textbox on
my userform. I initially tried to use:

ctrl = Screen.Activecontrol 'this is how I would do it in Access

but this did not work. Since I have several userforms, and I want this
subroutine to work for each of them, I tried declaring the control in the
subroutines declaration statement:

Public Sub EditMenuPopup(ctrl as Textbox)

Unfortunately, with this approach, I encountered two problems. When I called
the sub using:

Call EditMenuPopup(me.txt_SomeControl)

I got an error because it was trying to pass the value of the control, not
the actual control. When I tried:

Call EditMenuPopup(me.ActiveControl)

I got a type mismatch because it believes that the active control is a
multipage control, not the textbox that actually has the focus.

In some forms, the textbox might be on a multipage (tab) control, in others
it will just be on the main form, and this would probably work.

I thought about passing the userform and control names but don't know how to
refer to refer to the form with its name. In Access I would use:

Forms(strFormName)

Any ideas how to work approach this issue would be greatly appreciated

Dale

--
Don''t forget to rate the post if it was helpful!

email address is invalid
Please reply to newsgroup only.


Chip Pearson

Pass control to a function/subroutine
 
In the userform's code module, use the following event for your text box:

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, _
ByVal X As Single, ByVal Y As Single)
If Button = xlSecondaryButton Then
TheProc CTL:=Me.TextBox1
End If
End Sub

Then, in regular code moudle, use

Sub TheProc(CTL As MSForms.Control)
If TypeOf CTL Is MSForms.TextBox Then
MsgBox "Control Is A Text Box: " & CTL.Name & vbCrLf & _
CTL.Text
Else
Debug.Print "NOT A TEXT BOX: " & CTL.Name
End If
End Sub


--
Cordially,
Chip Pearson
Microsoft MVP - Excel, 10 Years
Pearson Software Consulting
www.cpearson.com
(email on the web site)



"Dale Fye" wrote in message
...
I want to popup a shortcut menu whenever a user right clicks in a textbox
on
my userform. I initially tried to use:

ctrl = Screen.Activecontrol 'this is how I would do it in Access

but this did not work. Since I have several userforms, and I want this
subroutine to work for each of them, I tried declaring the control in the
subroutines declaration statement:

Public Sub EditMenuPopup(ctrl as Textbox)

Unfortunately, with this approach, I encountered two problems. When I
called
the sub using:

Call EditMenuPopup(me.txt_SomeControl)

I got an error because it was trying to pass the value of the control, not
the actual control. When I tried:

Call EditMenuPopup(me.ActiveControl)

I got a type mismatch because it believes that the active control is a
multipage control, not the textbox that actually has the focus.

In some forms, the textbox might be on a multipage (tab) control, in
others
it will just be on the main form, and this would probably work.

I thought about passing the userform and control names but don't know how
to
refer to refer to the form with its name. In Access I would use:

Forms(strFormName)

Any ideas how to work approach this issue would be greatly appreciated

Dale

--
Don''t forget to rate the post if it was helpful!

email address is invalid
Please reply to newsgroup only.



Bob Phillips

Pass control to a function/subroutine
 
Presuming that you have created a commandbar, how about using the DblClick
event to pop it up.


--
---
HTH

Bob


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



"Dale Fye" wrote in message
...
I want to popup a shortcut menu whenever a user right clicks in a textbox
on
my userform. I initially tried to use:

ctrl = Screen.Activecontrol 'this is how I would do it in Access

but this did not work. Since I have several userforms, and I want this
subroutine to work for each of them, I tried declaring the control in the
subroutines declaration statement:

Public Sub EditMenuPopup(ctrl as Textbox)

Unfortunately, with this approach, I encountered two problems. When I
called
the sub using:

Call EditMenuPopup(me.txt_SomeControl)

I got an error because it was trying to pass the value of the control, not
the actual control. When I tried:

Call EditMenuPopup(me.ActiveControl)

I got a type mismatch because it believes that the active control is a
multipage control, not the textbox that actually has the focus.

In some forms, the textbox might be on a multipage (tab) control, in
others
it will just be on the main form, and this would probably work.

I thought about passing the userform and control names but don't know how
to
refer to refer to the form with its name. In Access I would use:

Forms(strFormName)

Any ideas how to work approach this issue would be greatly appreciated

Dale

--
Don''t forget to rate the post if it was helpful!

email address is invalid
Please reply to newsgroup only.




Dale Fye

Pass control to a function/subroutine
 
The popup works fine (mousedown, check for right button). The problem is
that before I popup it up, I want to enable/disable several of the controls
based on information in the textbox.

--
Don''t forget to rate the post if it was helpful!

email address is invalid
Please reply to newsgroup only.



"Bob Phillips" wrote:

Presuming that you have created a commandbar, how about using the DblClick
event to pop it up.


--
---
HTH

Bob


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



"Dale Fye" wrote in message
...
I want to popup a shortcut menu whenever a user right clicks in a textbox
on
my userform. I initially tried to use:

ctrl = Screen.Activecontrol 'this is how I would do it in Access

but this did not work. Since I have several userforms, and I want this
subroutine to work for each of them, I tried declaring the control in the
subroutines declaration statement:

Public Sub EditMenuPopup(ctrl as Textbox)

Unfortunately, with this approach, I encountered two problems. When I
called
the sub using:

Call EditMenuPopup(me.txt_SomeControl)

I got an error because it was trying to pass the value of the control, not
the actual control. When I tried:

Call EditMenuPopup(me.ActiveControl)

I got a type mismatch because it believes that the active control is a
multipage control, not the textbox that actually has the focus.

In some forms, the textbox might be on a multipage (tab) control, in
others
it will just be on the main form, and this would probably work.

I thought about passing the userform and control names but don't know how
to
refer to refer to the form with its name. In Access I would use:

Forms(strFormName)

Any ideas how to work approach this issue would be greatly appreciated

Dale

--
Don''t forget to rate the post if it was helpful!

email address is invalid
Please reply to newsgroup only.





Dale Fye

Pass control to a function/subroutine
 
Chip,

Thanks, that resolved the first issue.

Now that I am able to enable/disable some of the commandbar items based on
the value in the textbox, how do I pass the control to the function that is
run in the OnAction event of the commandbar?

Dale
--
Don''t forget to rate the post if it was helpful!

email address is invalid
Please reply to newsgroup only.



"Chip Pearson" wrote:

In the userform's code module, use the following event for your text box:

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, _
ByVal X As Single, ByVal Y As Single)
If Button = xlSecondaryButton Then
TheProc CTL:=Me.TextBox1
End If
End Sub

Then, in regular code moudle, use

Sub TheProc(CTL As MSForms.Control)
If TypeOf CTL Is MSForms.TextBox Then
MsgBox "Control Is A Text Box: " & CTL.Name & vbCrLf & _
CTL.Text
Else
Debug.Print "NOT A TEXT BOX: " & CTL.Name
End If
End Sub


--
Cordially,
Chip Pearson
Microsoft MVP - Excel, 10 Years
Pearson Software Consulting
www.cpearson.com
(email on the web site)



"Dale Fye" wrote in message
...
I want to popup a shortcut menu whenever a user right clicks in a textbox
on
my userform. I initially tried to use:

ctrl = Screen.Activecontrol 'this is how I would do it in Access

but this did not work. Since I have several userforms, and I want this
subroutine to work for each of them, I tried declaring the control in the
subroutines declaration statement:

Public Sub EditMenuPopup(ctrl as Textbox)

Unfortunately, with this approach, I encountered two problems. When I
called
the sub using:

Call EditMenuPopup(me.txt_SomeControl)

I got an error because it was trying to pass the value of the control, not
the actual control. When I tried:

Call EditMenuPopup(me.ActiveControl)

I got a type mismatch because it believes that the active control is a
multipage control, not the textbox that actually has the focus.

In some forms, the textbox might be on a multipage (tab) control, in
others
it will just be on the main form, and this would probably work.

I thought about passing the userform and control names but don't know how
to
refer to refer to the form with its name. In Access I would use:

Forms(strFormName)

Any ideas how to work approach this issue would be greatly appreciated

Dale

--
Don''t forget to rate the post if it was helpful!

email address is invalid
Please reply to newsgroup only.




All times are GMT +1. The time now is 06:30 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com