Set focus ở worksheet khi form hiện ra (1 người xem)

Liên hệ QC

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

levanduyet

Hãy để gió cuốn đi.
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,798
Được thích
4,706
Giới tính
Nam
Đôi khi chúng ta muốn hiện form lên nhưng con trỏ chuột không phải ở form là ở worksheet, vậy chúng ta phải làm sao?

Chúng ta sẽ dùng hàm API.

Bạn hãy đưa đoạn khai báo này vào trên cùng trong một module:
Mã:
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 SendMessage Lib "user32" Alias "SendMessageA" ( _
    ByVal HWnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    lParam As Any) As Long
Private Const WM_SETFOCUS = &H7

Đoạn code sau sẽ đưa con trỏ chuột đến worksheet:
Mã:
Private Sub SetSheetFocus()
    Dim HWND_XLDesk As Long
    Dim HWND_XLApp As Long
    Dim HWND_XLSheet As Long
    HWND_XLApp = Application.HWnd
    HWND_XLDesk = FindWindowEx(HWND_XLApp, 0&, "XLDESK", vbNullString)
    HWND_XLSheet = FindWindowEx(HWND_XLDesk, 0&, "EXCEL7", ActiveWindow.Caption)
    SendMessage HWND_XLSheet, WM_SETFOCUS, 0&, 0&
End Sub

Cuối cùng đoạn code để thực hiện yêu cầu của bạn mỗi khi form active là:
Mã:
Private Sub UserForm_Activate()
    SetSheetFocus
End Sub

Nếu muốn kiểm tra việc focus có ở worksheet hay không chúng ta có thể dùng một biến.
Bạn có thể khai báo một biến public trong module của form:
Mã:
Public SetFocusToWorksheet As Boolean
Và bây giờ thay đổi thủ tục sự kiện UserForm_Activate
Mã:
Private Sub UserForm_Activate()
    If SetFocusToWorksheet = True Then
        SetSheetFocus
    End If
End Sub

Và thủ tục để hiện form như sau:

Mã:
Sub AAA()
    Load UserForm1
    UserForm1.SetFocusToWorksheet = True
    UserForm1.Show vbModeless
End Sub


Nguồn tại đây.

Lê Văn Duyệt
 
Web KT

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

Back
Top Bottom