Set focus ở worksheet khi form hiện ra

Liên hệ QC

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,704
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
Back
Top Bottom