Why doesn't this work ?

G

Guest

Hi all,

I have a UserForm with a TextBox and a CommandButton.
I want to write some text on the TexBox using the 'SendMessage' API when the
CommandButton is clicked .

I am able to get the window handle of the TextBox control by using the
'apiGetFocus' but for somw reason, the text is not added !!!!


Code:

Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long

Const WM_SETTEXT = &HC

Private Sub CommandButton1_Click()
TextBox1.SetFocus
Hndle = apiGetFocus
SendMessage Hndle, WM_SETTEXT, 0, ByVal "WOW!"
End Sub


Any help would be much appreciated.

Regards.
 
R

Rob Bovey

All of the MSForms controls are windowless, so none of the API calls
that return window handles will work on them. The window handle returned by
your GetFocus API call is for a Window that is part of the UserForm itself,
rather than any of the controls on it. Is there some reason you need to
write to the textbox this way? It would be much easier to just set its Text
property.

--
Rob Bovey, Excel MVP
Application Professionals
http://www.appspro.com/

* Take your Excel development skills to the next level.
* Professional Excel Development
http://www.appspro.com/Books/Books.htm
 
G

Guest

Thanks for the quick reply Rob,

Actually the Hnandle of the UserForm is different from that of the TextBox
as shown by the MsggBox in the snippet take below :

Code:

Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Const WM_SETTEXT = &HC

Private Sub CommandButton1_Click()
Form_Handle = FindWindow(vbNullString, Me.Caption)
TextBox1.SetFocus
TextBox_Handle = apiGetFocus
MsgBox Form_Handle & vbTab & TextBox_Handle
SendMessage hndle, WM_SETTEXT, 0, ByVal "WOW!"
End Sub


The reason I want to use the SendMessage API rather than the Text property
is for experimenting purposes only. I saw some similar code on the Web for
Access which does work ! I don't see why Excel shouldn't !

Regards.
 
R

Rob Bovey

Actually the Hnandle of the UserForm is different from that of the TextBox
as shown by the MsggBox in the snippet take below :

You aren't getting the window handle of the UserForm itself, but rather
a child window of the UserForm that represents the area you drop controls
on.
The reason I want to use the SendMessage API rather than the Text
property
is for experimenting purposes only. I saw some similar code on the Web for
Access which does work ! I don't see why Excel shouldn't !

Access uses a much different Forms package than the rest of the Office
applications, so they aren't comparable.

--
Rob Bovey, Excel MVP
Application Professionals
http://www.appspro.com/

* Take your Excel development skills to the next level.
* Professional Excel Development
http://www.appspro.com/Books/Books.htm
 

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