Lấy Handle của Workbook (1 người xem)

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!
Hiện tôi đang muốn lấy Handle của cửa sổ Workbook hiện hành
Nếu sử dụng cách này thì cho ra kết quả hwnd <>0
[GPECODE=vb]
hwnd = FindWindow("XLMAIN", Application.Caption)
hwnd = FindWindowEx(hwnd, ByVal 0&, "XLDESK", vbNullString)
hwnd = FindWindowEx(hwnd, ByVal 0&, "EXCEL7", vbNullString)
[/GPECODE]

nhưng nếu tôi sử dụng như sau thì hwnd =0
[GPECODE=vb]
hwnd = FindWindow("XLMAIN", Application.Caption)
hwnd = FindWindowEx(hwnd, ByVal 0&, "XLDESK", vbNullString)
hwnd = FindWindowEx(hwnd, ByVal 0&, "EXCEL7", Application.ActiveWindow.Caption)
[/GPECODE]
Vậy xin mọi người hỗ trợ giải đáp giúp tại sao lại có sự sai khác như vậy?
Cám ơn mọi người!
 
Kính gửi: mọi người!
Hiện tôi đang muốn lấy Handle của cửa sổ Workbook hiện hành
Nếu sử dụng cách này thì cho ra kết quả hwnd <>0
[GPECODE=vb]
hwnd = FindWindow("XLMAIN", Application.Caption)
hwnd = FindWindowEx(hwnd, ByVal 0&, "XLDESK", vbNullString)
hwnd = FindWindowEx(hwnd, ByVal 0&, "EXCEL7", vbNullString)
[/GPECODE]

nhưng nếu tôi sử dụng như sau thì hwnd =0
[GPECODE=vb]
hwnd = FindWindow("XLMAIN", Application.Caption)
hwnd = FindWindowEx(hwnd, ByVal 0&, "XLDESK", vbNullString)
hwnd = FindWindowEx(hwnd, ByVal 0&, "EXCEL7", Application.ActiveWindow.Caption)
[/GPECODE]
Vậy xin mọi người hỗ trợ giải đáp giúp tại sao lại có sự sai khác như vậy?
Cám ơn mọi người!

Tôi chạy code thì thấy hwnd <> 0

handle_zps5682d8eb.jpg
 
Upvote 0
Nhận handle trong Excel

Có các vấn đề sau mà code của bạn hay rất nhiều code nhận handle trong Excel trên mạng chạy không chuẩn bởi các lý do sau:
1. Tên tập tin Excel chứa chuỗi có dấu - Unicode. Vậy các giá trị chuỗi đưa vào các hàm API có đuôi là A (ANSI) sẽ trở thành ???. Vậy hàm sẽ không chạy đúng.
2. Tập tin là Excel 2003 hoặc thấp hơn được mở bởi Excel 2007 hoặc cao hơn, khi đó caption window bị thêm "[Compatibility Mode]" nếu tập tin Excel này có trạng thái CompatibilityMode = True. Vậy hàm sẽ không chạy đúng.

Bộ code tôi viết đầy đủ để nhận đúng handle trong mọi trường hợp dưới đây

[GPECODE=vb]
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowW" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExW" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, _
ByVal lpsz1 As Any, ByVal lpsz2 As Any) As Long

Function GetHandleWorkbook()
'Handle to Active Workbook
Dim Hwnd&, objWb As Object
Hwnd = FindWindow(StrPtr("XLMAIN"), StrPtr(Application.Caption))
Hwnd = FindWindowEx(Hwnd, ByVal 0&, StrPtr("XLDESK"), vbNullString)
If Val(Application.Version) < 12 Then 'Excel 2003 or thap hon
Hwnd = FindWindowEx(Hwnd, ByVal 0&, StrPtr("EXCEL7"), StrPtr(Application.ActiveWindow.Caption))
Else 'Excel 2007 hoac cao hon
Set objWb = Application.ActiveWorkbook
Hwnd = FindWindowEx(Hwnd, ByVal 0&, StrPtr("EXCEL7"), _
StrPtr(Application.ActiveWindow.Caption & IIf(objWb.Excel8CompatibilityMode, " [Compatibility Mode]", "")))
End If
End Function

[/GPECODE]
 
Upvote 0

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

Back
Top Bottom