Thiết kế UserForm bài số 05: Ẩn Excel và hạ UserForm xuống để làm việc với màn hình Destop và các ứng dụng khác.

tuhocvba

Administrator
Thành viên BQT
Bài học thiết kế số 01
Bài học thiết kế số 02
Bài học thiết kế số 03 .
Bài học thiết kế số 04 .
Đối với việc ghi lại thao tác chuột, hoặc chụp ảnh màn hình, chúng ta vẫn muốn Macro thực thi, nhưng chúng (bao gồm Excel và Userform) phải được hạ xuống để không làm vướng màn hình chúng ta thao tác.
Và ở bài học hôm nay, mình muốn giới thiệu với các bạn điều đó.
Các bạn sử dụng code sau:
Mã:
Private Sub CommandButton1_Click()
    Application.WindowState = xlMinimized   'Thu nho man hinh file excel
    
    UserForm1.Show vbModal                  'Hien thi UserForm

    ThisWorkbook.Application.WindowState = xlNormal  'Tra lai man hinh Excel
End Sub
Video thuyết minh:
Bạn cần đăng nhập để thấy đa phương tiện
File download:
 

Euler

Administrator
Thành viên BQT
Ở mức độ dùng cơ bản thì ta sẽ dùng:
Mã:
Private Sub UserForm_Initialize()
    Application.Visible = False
End Sub
Vậy là chỉ còn có cái UserForm hiện ra, còn giao diện Excel là bị ẩn. Người dùng sẽ làm việc với UserForm, khỏi sờ mó gì vào Excel nữa.
Bạn cần đăng nhập để thấy đính kèm

Như vậy code cho nút bấm Close sẽ là:
Mã:
Private Sub Cmdclose_Click()
    Application.Visible = True 'Cho hiển thị lại excel
    Unload Me ' Ẩn Userform đi
End Sub
Tuy nhiên bây giờ lại có cái anh người dùng không tuân thủ quy trình trên, anh ấy cứ thích sờ chuột vào dấu X trên UserForm để tắt. Mà người code thì mong muốn là anh ấy phải click vào nút Close, tuân thủ theo đúng trình tự.
Bạn cần đăng nhập để thấy đính kèm

Vậy là chúng ta muốn người dùng không sờ vào cái nút đỏ này. Vậy thì ta can thiệp tiếp.
Chọn sự kiện QueryClose. Đây chính là sự kiện người dùng sờ mó vào cái dấu X đỏ này.
Bạn cần đăng nhập để thấy đính kèm

Ta có code cho sự kiện này như sau:
Mã:
Private Sub UserForm_QueryClose(Cancel As Integer, _
  CloseMode As Integer)
  If CloseMode = vbFormControlMenu Then 'Hằng số vbFormControlMenu = 0
    Cancel = True 'Hủy sự kiện, không cho close Userform
    MsgBox "Please use the Close Form button!"
  End If
End Sub
Bàn thêm về hằng số có thể thiết định cho CloseMode:
0…Người dùng đã click vào dấu X trên UserForm.
1…Người dùng đã Unload Userform. Cái này là dùng Code để close Userform: Hay gặp lệnh Unload Me. Khi đó thì tham số CloseMode = 1 nhé.
2…Windows đã kết thúc
3…Người dùng đóng Userform bằng task manager <Khiếp thật, không ngờ có thể can thiệp tới mức này>
//Các phần 1,2,3 người dịch chưa kiểm chứng. Còn 0 thì ở code trên đã được thể hiện bằng code ví dụ rồi. Người dịch đã chạy thử và thấy đúng là khi click vào dấu X thì CloseMode = 0 và khi đó các câu lệnh sau đó được thực thi, không close được Userform được nữa (theo đúng ý đồ code).
Bài viết được diễn đàn tham khảo từ:
 
Top