User Form Input Question

B

brichard429

I am designing a User Form to allow someone to enter their name. There is no
keyboard only a mouse for input. I have the alphabet represented by using
Label Objects. Each lable has the appropriate caption A,B C etc. I use the
SendKeys method to enter letters in the Text Box when the appropriate lable
is clicked. Example:
Private Sub Label3_Click()
SendKeys ("b")
End Sub

I also have a lable to set capslock:

Private Sub Label2_Click()
SendKeys ("{CAPSLOCK}")
End Sub

I would like the caption on each all of the letter labels to change with
the state of Capslock. In other words when CapsLock is on the label would
read "A" and when CapsLock is off the lable would read "a" etc. for all the
letters. I'm sure there's a way to do this using the vbKeyCapital constant
but I don't know how.
 
C

Chip Pearson

I'll withhold comment about your overall design, about which I will
give you the benefit of the doubt that there is some reason for not
using the keyboard and using SendKeys. Moreover, you'll find things
much simpler if you give meaningful names to the label controls. E.g.,
instead of Label12, use LabelLetterS or something.

I would create a module-scoped Boolean named bCapsLock and set and
test that. E.g,.

Private bCapsLock As Boolean

Private Sub Label2_Click()
Dim LBL As MSForms.Control
bCapsLock = Not bCapsLock
For each LBL In Me.Controls
If typeof LBL is MSForms.label then
if bCapsLock Then
LBL.Caption = UCase(LBL.Caption)
else
lbl.caption = Lcase(LBL.Caption)
end if
end if
next lbl
End Sub

' example letter
Private Sub Label3_Click()
If bCapsLock Then
SendKeys "B"
Else
SendKeys "b"
End If
End Sub


Cordially,
Chip Pearson
Microsoft MVP 1998 - 2010
Pearson Software Consulting, LLC
www.cpearson.com
[email on web site]
 
R

Rick Rothstein

I would not use SendKeys to do what you are doing... instead, I would just
assign the values to the TextBox directly. I would also use the Label's
Caption property to make the assignment. Here is a start of the code you
would need to do this...

' This is the routine to toggle the Label
' captions between upper and lower case...
' Label2 assumed because you posted that
Private Sub Label2_Click()
Dim C As Control
For Each C In Me.Controls
If TypeOf C Is MSForms.Label Then
If C.Caption <> "CapsLock" Then
If C.Caption = UCase(C.Caption) Then
C.Caption = LCase(C.Caption)
Else
C.Caption = UCase(C.Caption)
End If
End If
End If
Next
End Sub

' Each letter/number/symbol label would look like
' this except for the Label name in the assigment
Private Sub Label1_Click()
TextBox1.SelText = Label1.Caption
End Sub

' Each letter/number/symbol label would look like
' this except for the Label name in the assigment
Private Sub Label3_Click()
TextBox1.SelText = Label3.Caption
End Sub

etc....

Note that you can omit the comments in your actual code, they are there for
instruction purposes only.
 
R

Rick Rothstein

I should have mentioned... if you have other Labels on your UserForm that
are not "typable" symbols, then you will have to protect their captions from
being upper/lower cased when the CapsLock key is clicked. Right now I have
this line protecting the CapsLock label...

If C.Caption <> "CapsLock" Then

To expand this for other possible Labels you might have, it would change
like this...

If C.Caption <> "CapsLock" And C.Caption <> "Delete" And _
C.Caption <> "Insert" And C.Caption <> "Home" Then

Just keep And'ing additional tests as needed. Also note that the Label's
caption being tested for (inside the quotes) must match the actual Label's
caption exactly (letter casing, spaces).
 

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