Option Explicit
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
' 获得文本框中光标的所在位置
' hwnd 为文本框的句柄, LineNo 为光标所在的行数, ColNo 为光标所在的列数
Sub GetTextCursorPos(ByVal hwnd As Long, ByRef LineNo As Long, ByRef ColNo As Long)
Dim i As Long, j As Long, k As Long
Dim lParam As Long, wParam As Long
i = SendMessage(hwnd, EM_GETSEL, wParam, lParam)
j = i / 2 ^ 16 '取得目前光标前面有多少个字节
LineNo = SendMessage(hwnd, EM_LINEFROMCHAR, j, 0) '取得前面有多少行
LineNo = LineNo + 1
k = SendMessage(hwnd, EM_LINEINDEX, -1, 0) '取得目前光标所在行前面有多少个字节
ColNo = j - k + 1
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim LineNo As Long, ColNo As Long
GetTextCursorPos Text1.hwnd, LineNo, ColNo
Debug.Print LineNo, ColNo
End Sub