Không lấy được dữ liệu từ Edit Box của thanh Formula Bar (2 người xem)

  • Thread starter Thread starter VMH0307
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

VMH0307

Thành viên tiêu biểu
Tham gia
5/8/11
Bài viết
766
Được thích
609
Kính gửi: mọi người!
Tôi muốn lấy dữ liệu là chiều dài chuỗi dữ liệu trong Formula Bar (thanh công thức, đúng hơn từ Edit Box của nó)
Tôi có sử dụng như sau
1. Khai báo
[GPECODE=vb]Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_GETTEXTLENGTH = &HE
Public Const C_EXCEL_WINDOW = "XLMAIN"
Public Const C_EXCEL_EDITBOX = "EXCEL<"[/GPECODE]
2. Lấy Handle của Formula Bar
[GPECODE=vb]Public Function hWndEditbox() As Long
Dim hWndMain As Long
hWndMain = FindWindow(C_EXCEL_WINDOW, Application.Caption)
hWndEditbox = FindWindowEx(hWndMain, ByVal 0&, C_EXCEL_EDITBOX, vbNullString)
End Function[/GPECODE]
3. Lấy chiều dài của chuỗi dữ liệu trong formula
với 03 cách
cách 1
[GPECODE=vb]MsgBox SendMessage(hWndEditbox, WM_GETTEXTLENGTH, ByVal 0&, ByVal 0&)[/GPECODE]
cách 2
[GPECODE=vb]mystr = String(255, Chr$(0))
MsgBox GetWindowText(hWndEditbox, mystr, Len(mystr))[/GPECODE]
cách 3
[GPECODE=vb]MsgBox GetWindowTextLength(hWndEditbox)[/GPECODE]
Vậy mà kết quả trả về luôn là 0 (mặc dù trong Formula Bar vẫn có dữ liệu)
Vậy xin nhờ mọi người giải đáp giúp nguyên nhân tại sao và cách khắc phục (dĩ nhiên do tôi có lý do nên không dùng ActiveCell.Value nhé.)
Cám ơn mọi người
 
Web KT

Bài viết mới nhất

Back
Top Bottom