- 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:
Đoạn code sau sẽ đưa con trỏ chuột đến worksheet:
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à:
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:
Và bây giờ thay đổi thủ tục sự kiện UserForm_Activate
Và thủ tục để hiện form như sau:
Nguồn tại đây.
Lê Văn Duyệt
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
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