[Xin hướng dẫn] Load 1 user form con vào user form chính khi click vào button trên user form chính

Liên hệ QC

gameonly308

Thành viên hoạt động
Tham gia
4/5/09
Bài viết
197
Được thích
10
Em có 2 user form: user form 1 ( là user form chính ) và user form 2 (là user form nhỏ)
Em muốn là khi mình click vào button trên user form 1 thì nó sẽ load user form 2 vào user form 1 thì phải làm thế nào ạ.
Mong các bác hướng cho em với, em tìm trên mạng mà không thấy có bài viết nào tương tự ạ. Em cảm ơn!
 
Em có 2 user form: user form 1 ( là user form chính ) và user form 2 (là user form nhỏ)
Em muốn là khi mình click vào button trên user form 1 thì nó sẽ load user form 2 vào user form 1 thì phải làm thế nào ạ.
Mong các bác hướng cho em với, em tìm trên mạng mà không thấy có bài viết nào tương tự ạ. Em cảm ơn!
Sửa tiêu đề bài viết lại cho rỏ ràng là "Khi click vào 1 nút UserForm1 thì UserForm2 hiện ra và đóng UserForm1".

Và nội dung bên dưới nêu cụ thể:
Khi mở UserForm1 và click vào 1 nút thì UserForm2 hiện ra đồng thời đóng UserForm1".
Ngược lại khi UserForm2 hiện ra và click vào 1 nút thì đóng UserForm2 đồng thời mở UserForm1.
 
Upvote 0
Em có 2 user form: user form 1 ( là user form chính ) và user form 2 (là user form nhỏ)
Em muốn là khi mình click vào button trên user form 1 thì nó sẽ load user form 2 vào user form 1 thì phải làm thế nào ạ.
Mong các bác hướng cho em với, em tìm trên mạng mà không thấy có bài viết nào tương tự ạ. Em cảm ơn!

"Load vào" nên hiểu như thế nào?
Nếu hiểu theo nghĩa: cái Userform 2 là Subform nằm ngay trong Userform 1 thì Excel không có tính năng này nhé, thay nó bằng Listbox thôi.
 
Upvote 0
Cái "userform con" ấy nó có tự lập không?
Nếu nó tự lập thì làm theo bài #2. Bởi vì nó chẳng có lý do gì để phải nằm bên trong cái "userform lớn" cả.
Nếu nó không tự lập thì mở một cái Frame trong "userform lớn", đưa những controls của nó vào. Lúc mở Userform lớn thì disable cái frame này. Click button gì đó thì hiện ra.
 
Upvote 0
Ngoài đề xuất ListBox & prame thì mình ch là tạo thêm 1 Pages nữa thì hoàn chỉnh hơn; Lúc nào cần thì ta chuyển từ Page này sang Page kia mà thao tác mà thôi?
Xin các bạn cho ý kiến thêm về Page này.

(húc ngày cuối tuần vui vẻ!
 
Upvote 0
Bạn dùng win API
Hàm sử dụng:
1. FindWindow: để tìm Handle của một cửa sổ
2. SetParent: để gán cửa sổ vào một của sổ khác.
Call SetParent(Hwnd2 , Hwnd1)​
--------------------​
PHP:
#If VBA7 Then
  Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
  Private Declare PtrSafe Function SetParent Lib "user32" (ByVal hWndChild As LongPtr, ByVal hWndNewParent As LongPtr) As Long
#Else
  Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
  Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

#If VBA7 Then
  Function handleForm(Caption$) As LongPtr
#Else
  Function handleForm(Caption$) As Long
#End If
  handleForm = FindWindow("ThunderDFrame", Caption)
End Function
     
Sub SetParentUserform()
   Load Userform1: Load Userform2
   Call SetParent(handleForm(Userform2.caption), handleForm(Userform1.caption))
End Sub
 
Upvote 0
Sửa tiêu đề bài viết lại cho rỏ ràng là "Khi click vào 1 nút UserForm1 thì UserForm2 hiện ra và đóng UserForm1".

Và nội dung bên dưới nêu cụ thể:
Khi mở UserForm1 và click vào 1 nút thì UserForm2 hiện ra đồng thời đóng UserForm1".
Ngược lại khi UserForm2 hiện ra và click vào 1 nút thì đóng UserForm2 đồng thời mở UserForm1.
Dạ là nó giống như dạng ListBox ý bác, khi ấn vào nút command thì nó sẽ load UserForm2 vào 1 khoảng trên UserForm1 vv....
Bài đã được tự động gộp:

Ngoài đề xuất ListBox & prame thì mình ch là tạo thêm 1 Pages nữa thì hoàn chỉnh hơn; Lúc nào cần thì ta chuyển từ Page này sang Page kia mà thao tác mà thôi?
Xin các bạn cho ý kiến thêm về Page này.

(húc ngày cuối tuần vui vẻ!
Nếu dùng MultiPage thì cũng làm được. Nhưng em muốn là nó như kiểu 1 trang web, ấn vào button thì nó sẽ load UserForm2 vào. Sẽ không phải unload userform1 ý ạ.
Bài đã được tự động gộp:

Bạn dùng win API
Hàm sử dụng:
1. FindWindow: để tìm Handle của một cửa sổ
2. SetParent: để gán cửa sổ vào một của sổ khác.
Call SetParent(Hwnd2 , Hwnd1)​
--------------------​
PHP:
#If VBA7 Then
  Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
  Private Declare PtrSafe Function SetParent Lib "user32" (ByVal hWndChild As LongPtr, ByVal hWndNewParent As LongPtr) As Long
#Else
  Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
  Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

#If VBA7 Then
  Function handleForm(Caption$) As LongPtr
#Else
  Function handleForm(Caption$) As Long
#End If
  handleForm = FindWindow("ThunderDFrame", Caption)
End Function
    
Sub SetParentUserform()
   Load Userform1: Load Userform2
   Call SetParent(handleForm(Userform2.caption), handleForm(Userform1.caption))
End Sub
Em cảm ơn bác, để em làm thử ạ!
 
Upvote 0
Nếu dùng MultiPage thì cũng làm được. Nhưng em muốn là nó như kiểu 1 trang web, ấn vào button thì nó sẽ load UserForm2 vào. Sẽ không phải unload userform1 ý ạ.
Nào có ai bắt bạn Unload Userform1 đâu kia chứ
Nó vẫn sờ sờ trước mặt bạn mà; Còn cái Page1 có hay không có Control gì trên nó cũng được mà!
 
Upvote 0
Dạ là nó giống như dạng ListBox ý bác, khi ấn vào nút command thì nó sẽ load UserForm2 vào 1 khoảng trên UserForm1 vv....
...
Nếu dùng MultiPage thì cũng làm được. Nhưng em muốn là nó như kiểu 1 trang web, ấn vào button thì nó sẽ load UserForm2 vào. Sẽ không phải unload userform1 ý ạ.


Giống kiểu hiển thị như vậy phải không?


FormSubFrom.gif

Theo cách này thì đối với Userform, tôi nghĩ dùng cách của bác SA_DQ dùng Pages dễ thiết kế hơn.
Dùng CommandButton hay Label làm nút lệnh cũng được. Mỗi khi bấm một nút sẽ hiển thị Page tương ứng, các page còn lại cho Visible= False là được rồi. Trong mỗi Page sẽ dùng Listbox để hiển thị lưới dữ liệu.
Dùng Frame thì cũng làm tương tự nhưng khi thiết kế nhiều control trên từng Frame sẽ tốn chỗ hơn cho đến khi thiết kế xong các Frame mới kéo chồng các Frame lên nhau. Có thể viết code để load các frame ở một vị trí X, Y cố định nào đó trên Form Cha cũng như chiều rộng x cao như ý muốn.
 
Lần chỉnh sửa cuối:
Upvote 0
Đẹp quá. :)
Anh có file demo cho em xin tham khảo với.

:) À..quên bổ sung đây là file Access và Form của Access có hỗ trợ Subform nên việc thiết kế đơn giản hơn nhưng các bước code thực hiện cũng giống như tôi đã đề cập ở trên dùng cho Userform.
 
Upvote 0
Giống kiểu hiển thị như vậy phải không?


View attachment 228503

Theo cách này thì đối với Userform, tôi nghỉ dùng cách của bác SA_DQ dùng Pages dễ thiết kế hơn.
Dùng CommandButton hay Label làm nút lệnh cũng được. Mỗi khi bấm một nút sẽ hiển thị Page tương ứng, các page còn lại cho Visible= False là được rồi. Trong mỗi Page sẽ dùng Listbox để hiển thị lưới dữ liệu.
Dùng Frame thì cũng làm tương tự nhưng khi thiết kế nhiều control trên từng Frame sẽ tốn chỗ hơn cho đến khi thiết kế xong các Frame mới kéo chồng các Frame lên nhau. Có thể viết code để load các frame ở một vị trí X, Y cố định nào đó trên Form Cha cũng như chiều rộng x cao như ý muốn.
Dạ vâng, ý em là như file demo của bác đấy ạ.
Nhiều frame chồng lên nhau lúc đầu thì tiện ạ. Khi thêm bớt sửa chữa gì lôi từng frame ra rất mệt bác ạ :(
 
Upvote 0
Em có 2 user form: user form 1 ( là user form chính ) và user form 2 (là user form nhỏ)
Em muốn là khi mình click vào button trên user form 1 thì nó sẽ load user form 2 vào user form 1 thì phải làm thế nào ạ.
Mong các bác hướng cho em với, em tìm trên mạng mà không thấy có bài viết nào tương tự ạ. Em cảm ơn!
Hướng dẫn bằng niềm tin à?
Đính kèm tập tin với 2 Form và những thứ có trên chúng. Người khác sẽ xem chúng và code thì mới có thể có đề xuất cụ thể được.
 
Upvote 0
Hướng dẫn bằng niềm tin à?
Đính kèm tập tin với 2 Form và những thứ có trên chúng. Người khác sẽ xem chúng và code thì mới có thể có đề xuất cụ thể được.
Nó chưa có code gì cả, vì mục đích em muốn viết là ấn nút combobox thì sẽ load userform2 vào userform1 sau đó em mới viết code ạ nên chỉ cần xin các bác phương pháp để giải quyết thôi ạ!
 
Upvote 0
Nó chưa có code gì cả, vì mục đích em muốn viết là ấn nút combobox thì sẽ load userform2 vào userform1 sau đó em mới viết code ạ nên chỉ cần xin các bác phương pháp để giải quyết thôi ạ!
/(iểu này của bạn giống như: "Sinh con rồi mới sinh cha", chắc vậy!

Bạn chưa nêu bảng CSDL của bạn là gì? Form1 có những nhiệm vụ gì & Form2 xài trong việc gì thì chả mấy ai thích thú giúp bạn cả, vì dễ công cốc!
 
Upvote 0
/(iểu này của bạn giống như: "Sinh con rồi mới sinh cha", chắc vậy!

Bạn chưa nêu bảng CSDL của bạn là gì? Form1 có những nhiệm vụ gì & Form2 xài trong việc gì thì chả mấy ai thích thú giúp bạn cả, vì dễ công cốc!
Vâng em cảm ơn bác đã tư vấn ạ.
Em muốn làm các user form con để nhập dữ liệu các định dạng khác nhau. Nếu cứ nhập xong 1 dạng lại phải unload hoặc bật cửa sổ user form mới rất lằng nhằng nên mới nảy sinh ý đồ đó ạ. Nó giống 1 website ý ạ, lúc nào nó cũng giữ nguyên 1 frame dạng #Content, còn đâu bên #Tree sẽ lick để load vào #Content. Em cảm ơn bác!
 
Upvote 0
Vâng em cảm ơn bác đã tư vấn ạ.
Em muốn làm các user form con để nhập dữ liệu các định dạng khác nhau. Nếu cứ nhập xong 1 dạng lại phải unload hoặc bật cửa sổ user form mới rất lằng nhằng nên mới nảy sinh ý đồ đó ạ. Nó giống 1 website ý ạ, lúc nào nó cũng giữ nguyên 1 frame dạng #Content, còn đâu bên #Tree sẽ lick để load vào #Content. Em cảm ơn bác!

Excel Userform không hỗ trợ nhiều công cụ cho việc thiết kế nên bạn không thể yêu cầu quá nhiều được đâu. Chỉ có thể sáng tạo, tận dụng trên những gì có sẳn cho nó đơn giản, code cũng nhẹ nhàng hơn chỉ cần thêm chút mỹ thuật vô là OK rồi.
Trong một Form mà bạn thiết kế nhiều Control trên nó quá làm nó tải lên cũng chậm. Cái main form tôi thiết kế cũng có nhiều Sub form trong đó nhưng khi load lên cũng chỉ load có 1 form mặc định, khi nào bấm nút lênh khác thì mới load các form kế tiếp, unload form trước đó. Nó có cái nhược điểm nhỏ là việc chuyển qua các form khác sẽ chậm hơn chút (so với việc load sẳn toàn bộ form) nhưng người dùng cũng không nhận thấy rõ rệt, bù lại cái Form này sẽ không chiếm nhiều tài nguyên hệ thống khi load lên.
 
Upvote 0
Giống kiểu hiển thị như vậy phải không?


View attachment 228503

Theo cách này thì đối với Userform, tôi nghĩ dùng cách của bác SA_DQ dùng Pages dễ thiết kế hơn.
Dùng CommandButton hay Label làm nút lệnh cũng được. Mỗi khi bấm một nút sẽ hiển thị Page tương ứng, các page còn lại cho Visible= False là được rồi. Trong mỗi Page sẽ dùng Listbox để hiển thị lưới dữ liệu.
Dùng Frame thì cũng làm tương tự nhưng khi thiết kế nhiều control trên từng Frame sẽ tốn chỗ hơn cho đến khi thiết kế xong các Frame mới kéo chồng các Frame lên nhau. Có thể viết code để load các frame ở một vị trí X, Y cố định nào đó trên Form Cha cũng như chiều rộng x cao như ý muốn.
Nhìn giao diện bắt mắt quá anh ơi :victory:
 
Upvote 0
Nó chưa có code gì cả, vì mục đích em muốn viết là ấn nút combobox thì sẽ load userform2 vào userform1 sau đó em mới viết code ạ nên chỉ cần xin các bác phương pháp để giải quyết thôi ạ!
Nếu chưa có code thì ít ra phải thiết kế 2 Form: có những control gì, mô tả hoạt động v...v
Bạn nói về nhập cái gì đó và không muốn "cứ nhập xong 1 dạng lại phải unload". Có ai bắt bạn phải unload gì đâu. Bạn dùng 1 Form không được à, tại sao?
 
Upvote 0
Nhìn giao diện bắt mắt quá anh ơi :victory:

Nhập liệu là một công việc nhàm chán rồi mà nếu phải nhìn các form nhập liệu rối rắm, khó thao tác, màu sắc dễ gây mỏi mắt thì người dùng không có hứng thú gì với ứng dụng của bạn. Do đó khi thiết kế ứng dụng tôi cũng chú ý nhiều đến phần giao diện (UI) và trải nghiêm (UX) :) .
 
Upvote 0
Web KT

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

Back
Top Bottom