Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Const EM_GETLINECOUNT = &HBApublic sub GetCaretpos(ByVal hwnd5 As Long, LineNo As Long, ColNo As Long)
Dim i As Long
i=sendmessage(hwnd5 ,GETLINECOUNT ,0,0)
end sub这是我在VBA中的代码,hwnd5 是我已经获得的TEXTBOX1的句柄,在VBA中执行上述代码不能够取得文本框中输入信息的行数,但是在VB中这段代码能够取得行数,所以我想问一下sendmessage函数在VBA中无效么?
请高手指点一下.谢谢了.
Dim i As Long
i=sendmessage(hwnd5 ,GETLINECOUNT ,0,0)
end sub这是我在VBA中的代码,hwnd5 是我已经获得的TEXTBOX1的句柄,在VBA中执行上述代码不能够取得文本框中输入信息的行数,但是在VB中这段代码能够取得行数,所以我想问一下sendmessage函数在VBA中无效么?
请高手指点一下.谢谢了.
再试一下看行不行!
另:你的text的句柄是如何得到的呢?用FindWindow吗?,(VBA功能沒有hWnd屬性,所以得靠 FindWindow 來取得handle value)
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) 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 EM_GETSEL = &HB0
Const EM_LINEFROMCHAR = &HC9
Const EM_LINEINDEX = &HBB
Const EM_GETLINECOUNT = &HBA&Sub GetCaretPos(ByVal hwnd5 As Long, LineNo As Long, ColNo As Long)
Dim i As Long, j As Long
Dim k As Long
MsgBox "cccc: " & hwnd5
i = SendMessage(hwnd5, EM_GETLINECOUNT, 0, 0)
MsgBox "bbbb: " & i
End Sub
Private Sub CommandButton1_Click()
Dim LineNo As Long, ColNo As Long
MsgBox "aaaaa: " & lCurHwnd
Call GetCaretPos(lCurHwnd, LineNo, ColNo)
Label1.Caption = LineNo
Label2.Caption = ColNo
End SubPrivate Sub TextBox1_Change()
Dim PT_Mouse As POINTAPI
Dim lX As Long, lY As Long
Call GetCursorPos(PT_Mouse)
lX = PT_Mouse.x
lY = PT_Mouse.y
lCurHwnd = WindowFromPoint(lX, lY)
End Sub
这是我的全部代码,文本框句柄可以取到但是文本框行数取不到,I值是0.
只能得到userform和包含其中的S3 server的句柄(你抓的是这个)
所以不管textbox的情况如何,sendmessage并无法对它起作用
当然也就抓不到。
你还是自己用字符串来计算吧。
Private Sub CommandButton1_Click()
TextBox1.SetFocus
MsgBox (TextBox1.LineCount)
End Sub