Gọi Sub Trong UserForm | Giải Pháp Excel
Có thể bạn quan tâm
- Trang chủ Có gì mới Hoạt động gần nhất Tác giả
- Diễn đàn Tìm bài viết mới Tìm theo chuyên mục
- Video
Video về Excel Video về tin học khác Tin tức về tin học chung - Thông tin mới Featured content Tìm bài mới Tài Nguyên Mới Hoạt động gần nhất
- Tài nguyên Đánh giá mới nhất Tìm tài nguyên
- Đóng góp
Tìm kiếm
Mọi nơi Đề tài Diễn đàn này Đề tài này Chỉ tìm trong tiêu đề Note Tìm kiếm Tìm nâng cao…- Tìm bài viết mới
- Tìm theo chuyên mục
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
- Khách ơi! GPE thông tin đến bạn ấn phẩm "lập trình VBA trong Excel": - Phần cơ bản - Phần Nâng Cao - VBA trong Excel - Cải thiện và tăng tốc
- Trang chủ
- Diễn đàn
- Lập Trình với Excel
- Thread starter Thread starter giaiphap
- Ngày gửi Ngày gửi 8/4/20
Người dùng đang xem chủ đề này
Đang trực tuyến: 2 (Thành viên: 0, Khách: 2)giaiphap
==(^o^)==
Tham gia 12/3/07 Bài viết 5,809 Được thích 6,368 Donate (Momo)
Giới tính Nam Tôi có một ý đồ không giống ai thế này. Tôi có cái Sub trong UserForm tên TenSub, bây giờ từ Module gọi nó thì dùng lệnh nào vậy? Nếu sub đó từ Module thì gọi nó thế này. Mã: Sao chép. Application.Run "Module.TenSub" Nhưng nó nằm trong UserForm tôi dùng lệnh này nó báo lỗi. Mã: Sao chép. Application.Run "UserForm.TenSub" Có bạn sẽ hỏi tại sao không đặt trong Module cho dễ. Do tôi muốn đặt trong UseForm cho dễ quản lý, vì thực tế có rất nhiều UserForm mà mỗi cái lại có tùy biến riêng (Chỉ tên Sub giống nhau). Nói thêm nửa là: Tôi muốn tùy biến UserForm chứ chỉ gọi cố định thì dùng lệnh này cũng được. Mã: Sao chép. Call UserForm.TenSub Sắp xếp theo thời gian sắp xếp theo bầu chọn thuyyeu99
Trùm Nhiều Chuyện
Tham gia 6/6/08 Bài viết 1,729 Được thích 875giaiphap đã viết: Tôi có một ý đồ không giống ai thế này. Tôi có cái Sub trong UserForm tên TenSub, bây giờ từ Module gọi nó thì dùng lệnh nào vậy? Nếu sub đó từ Module thì gọi nó thế này. Mã: Sao chép. Application.Run "Module.TenSub" Nhưng nó nằm trong UserForm tôi dùng lệnh này nó báo lỗi. Mã: Sao chép. Application.Run "UserForm.TenSub" Có bạn sẽ hỏi tại sao không đặt trong Module cho dễ. Do tôi muốn đặt trong UseForm cho dễ quản lý, vì thực tế có rất nhiều UserForm mà mỗi cái lại có tùy biến riêng (Chỉ tên Sub giống nhau). Nói thêm nửa là: Tôi muốn tùy biến UserForm chứ chỉ gọi cố định thì dùng lệnh này cũng được. Mã: Sao chép. Call UserForm.TenSub Nhấp chuột vào đây để mở rộng...Cái này ngộ nè. Upvote 0 V
VetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,788 Nghề nghiệp Thầy bói bài ta Tôi rất ít dùng UserForm cho nên không chắc lắm. Chỉ đoán theo lý thuyết thì UserForm có lẽ là một object, tức là cách ứng xử của nó giống như class module. Nếu đúng vậy thì do Project bắt buộc một UserForm phải được dựng lên rồi mới sử dụng được các thuộc tính, phương thức của nó. Nếu là tôi thì tôi nghiên cứu cách kết nối trễ, tỷ dụ như CreateObject. Lưu ý: những người chuyên dùng callback có thể có cách dùng pointer để cưỡng bức kết nối thẳng với hàm (non virtual) của bất cứ module nào. (hàm virtual không có địa chỉ cố định nên không thể kết nối thẳng) Upvote 0HeSanbi
Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia 24/2/13 Bài viết 2,828 Được thích 4,607 Giới tính Nam UserForm là một Lớp đối tượng. Application.Run thì không thể gọi bất kì thủ tục nào trong một Lớp đối tượng. Có thể tuy biến theo cách này: --------------------------------------- PHP: Sao chép. Private Sub Sub_Test() VBA.Load UserForm1 'UserForm1.Show 0 Dim F For Each F In VBA.UserForms Select Case F.Name Case "UserForm1" Call F.TenSub End Select Next End Sub Upvote 0truongvu317
Thành viên tích cực

Tham gia 15/11/10 Bài viết 957 Được thích 699 Giới tính Nữ giaiphap đã viết: Application.Run Nhấp chuột vào đây để mở rộng...Thắc mắc một cái là sao lại dùng cái này để gọi hàm Upvote 0 V
VetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,788 Nghề nghiệp Thầy bói bài tatruongvu317 đã viết: Thắc mắc một cái là sao lại dùng cái này để gọi hàm Nhấp chuột vào đây để mở rộng...Người ta đã giải thích, hàm tuỳ chọn theo biến string. Đương nhiên có cách đi vòng là dùng một module chính, Application.Run hàm trong module ấy với tham số là string Bên trong hàm được gọi kia có Select Case để lượt lại, gọi đúng hàm ở module mong muốn. Upvote 0
befaint
|||||||||||||
Tham gia 6/1/11 Bài viết 14,600 Được thích 19,840VetMini đã viết: Người ta đã giải thích, hàm tuỳ chọn theo biến string. Nhấp chuột vào đây để mở rộng...Chủ thớt ghi rõ là "Gọi Sub" mà anh.
giaiphap
==(^o^)==
Tham gia 12/3/07 Bài viết 5,809 Được thích 6,368 Donate (Momo)
Giới tính Nam HeSanbi đã viết: UserForm là một Lớp đối tượng. Application.Run thì không thể gọi bất kì thủ tục nào trong một Lớp đối tượng. Có thể tuy biến theo cách này: --------------------------------------- PHP: Sao chép. Private Sub Sub_Test() VBA.Load UserForm1 'UserForm1.Show 0 Dim F For Each F In VBA.UserForms Select Case F.Name Case "UserForm1" Call F.TenSub End Select Next End Sub Nhấp chuột vào đây để mở rộng...Đúng cái tôi cần, thật ra trước khi gọi Sub trên UserForm thì UserForm đang được mở, chính vì vậy tôi sửa Sub lại như sau: Mã: Sao chép. Sub Sub_Test(aName As String) Dim F For Each F In VBA.UserForms If F.Name = aName Then F.TenSub Exit Sub End If Next End Sub
truongvu317 đã viết: Thắc mắc một cái là sao lại dùng cái này để gọi hàm Nhấp chuột vào đây để mở rộng...Tôi đã nói lúc đầu, do tôi muốn tùy biến UserForm, lệnh đó chỉ ví dụ thôi, còn thực tế tôi muốn như thế này. Mã: Sao chép. Application.Run tenFrm & ".TenSub" Trong đó tenFrm là một biến kiểu chuỗi, là tên UserForm muốn gọi.
VetMini đã viết: Người ta đã giải thích, hàm tuỳ chọn theo biến string. Đương nhiên có cách đi vòng là dùng một module chính, Application.Run hàm trong module ấy với tham số là string Bên trong hàm được gọi kia có Select Case để lượt lại, gọi đúng hàm ở module mong muốn. Nhấp chuột vào đây để mở rộng...Bác @VetMini hiểu đúng ý tôi. Upvote 0 V
VetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,788 Nghề nghiệp Thầy bói bài tabefaint đã viết: Chủ thớt ghi rõ là "Gọi Sub" mà anh.Application.Run "Module1.GoiSubCuaForm", TenForm, TenMethod Sub GoiSubCuaForm(TenForm, TenMethod) With UserForms(TenForm) ' form phải được mở sẵn, nếu khong thì dùng select case TenForm để set miForm = New UserFormTenForm Select Case TenMethod ' hơi lủng củng, nhưng tạm thử xem Case "abc" ' ở đây chỉ thử thôi, không chắc VBA cho kết nối trễ kiểu này .abc Case "buggeredIfIKnew" .buggeredIfIKnew End Select End With End Sub Tôi chỉ gợi ý thôi. Toi khỏng xài UserForm cho nên ngại lập project để thử Upvote 0-------- Và chủ thớt là người rất cẩn trọng đã xem xét trước khi hỏi vấn đề gì đó. Nhấp chuột vào đây để mở rộng...
HeSanbi
Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia 24/2/13 Bài viết 2,828 Được thích 4,607 Giới tính Namgiaiphap đã viết: Application.Run tenFrm & ".TenSub" Nhấp chuột vào đây để mở rộng...Có thể bác không biết. Trong lập trình nâng cao hoặc ra sản phẩm Add-in cho người dùng cuối thì tất cả các Thủ tục không sử dụng cho bảng tính cần được viết "ẩn danh" và gọi với phương thức hàm Application.Run nếu code nằm ngoài module chính. Ví dụ: Tôi có thủ tục : Private Function A() End Function Viết như vậy thì thủ tục này sẽ không được tham chiếu đến ứng dụng Excel. Và gọi: Application.Run "'" & ThisWorkbook.Name & "'!module1.A" Gọi ngoài tiến trình: Dim oApp as Object Set oApp = VBA.GetObject("App FullPath") oApp.Run "'AppName'!module1.A" Ưu điểm của Phương thức: Cho phép nhập số đối số động từ 1 đến 32. Nhược điểm: Code quá dài, không thay đổi giá trị của đối số truyền vào khi kết thúc. Upvote 0
thuyyeu99
Trùm Nhiều Chuyện
Tham gia 6/6/08 Bài viết 1,729 Được thích 875 Àh chắc mình lờ mờ đoán được bạn muốn làm gì rồi Upvote 0 VVetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,788 Nghề nghiệp Thầy bói bài ta Bổ sung cho bài #9: Thường thì gọi method của object, người ta có thể dùng CallByName. Sub GoiSubCuaForm(TenForm, TenMethod) CallByName UserForms(TenForm), TenMethod, vbMethod End Sub Như đã nói trước đây, tôi không có thử với UserForm nên không bảo đảm. Upvote 0giaiphap
==(^o^)==
Tham gia 12/3/07 Bài viết 5,809 Được thích 6,368 Donate (Momo)
Giới tính Nam VetMini đã viết: Bổ sung cho bài #9: Thường thì gọi method của object, người ta có thể dùng CallByName. Sub GoiSubCuaForm(TenForm, TenMethod) CallByName UserForms(TenForm), TenMethod, vbMethod End Sub Như đã nói trước đây, tôi không có thử với UserForm nên không bảo đảm. Nhấp chuột vào đây để mở rộng...Cả 2 đoạn code ở #9 và #13 đều báo cùng một lỗi.
Code #9 báo tại dòng Mã: Sao chép. With UserForms(TenForm) Code $13 tại dòng Mã: Sao chép. CallByName UserForms(TenForm), TenMethod, vbMethod Trước khi hỏi thì em cũng dùng lệnh thế này. Mã: Sao chép. Dim Frm As MSForms.UserForm Set Frm = New UserForm 'Với UserForm là tên của Form đang mở Frm.TenSub Nhưng nó lại báo lỗi, nhưng giờ em sửa chút và nó đã chạy ngon rồi. Mã: Sao chép. Dim Frm As Object Set Frm = New UserForm 'Với UserForm là tên của Form đang mở Frm.TenSub Nhưng cách này vẫn chưa tùy biến được UserForm. thuyyeu99 đã viết: Àh chắc mình lờ mờ đoán được bạn muốn làm gì rồi Nhấp chuột vào đây để mở rộng...Ý đồ của mình ở file dưới đây người đẹp.
File đính kèm
- TestCode.xlsm TestCode.xlsm 23 KB · Đọc: 24
HeSanbi
Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia 24/2/13 Bài viết 2,828 Được thích 4,607 Giới tính Namgiaiphap đã viết: Cả 2 đoạn code ở #9 và #13 đều báo cùng một lỗi. View attachment 235076 Code #9 báo tại dòng Mã: Sao chép. With UserForms(TenForm) Code $13 tại dòng Mã: Sao chép. CallByName UserForms(TenForm), TenMethod, vbMethod Trước khi hỏi thì em cũng dùng lệnh thế này. Mã: Sao chép. Dim Frm As MSForms.UserForm Set Frm = New UserForm 'Với UserForm là tên của Form đang mở Frm.TenSub Nhưng nó lại báo lỗi, nhưng giờ em sửa chút và nó đã chạy ngon rồi. Mã: Sao chép. Dim Frm As Object Set Frm = New UserForm 'Với UserForm là tên của Form đang mở Frm.TenSub Nhưng cách này vẫn chưa tùy biến được UserForm. Ý đồ của mình ở file dưới đây người đẹp. Nhấp chuột vào đây để mở rộng...------------------------- Lớp UserForms của VBA không sử dụng đối số là Chuỗi để lấy đối tượng nên dẫn đến lỗi. ------------------------ Mã: Sao chép. Dim Frm As MSForms.UserForm Set Frm = New UserForm 'Với UserForm là tên của Form đang mở Frm.TenSub Dòng code trên bị lỗi vì khao báo Lớp bị sai ở Dòng: Mã: Sao chép. Dim Frm As MSForms.UserForm Form được tạo với tên gì thì khai báo tên đó, vì nó là lớp: Mã: Sao chép. Dim Frm As UserForm1 Hoặc Dim Frm As New UserForm1 Upvote 0 V
VetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,788 Nghề nghiệp Thầy bói bài ta Toi khong chắc là khi bạn chạy lệnh: Set frm = New UserFormX thì nó nối frm vào cái UserFormX đã mở sẵn hay nó tạo thêm một cái Object nữa, theo mẫu UserFormX. Theo lý thuyết OO thì là trường hợp 2. Nhưng mà ai biết nổi cái ông nội VBA và UserForm này. Upvote 0 VVetMini
Đang đi tìm hòn đá
Tham gia 21/12/12 Bài viết 17,867 Được thích 24,788 Nghề nghiệp Thầy bói bài tagiaiphap đã viết: Cả 2 đoạn code ở #9 và #13 đều báo cùng một lỗi. . Nhấp chuột vào đây để mở rộng...Tôi thử một chút, và "tạm" tin rằng do cái collection UserForms nó chỉ cho truy cập phần tử bằng chỉ số chứ không chịu dùng tên. Vì vậy cách truy cập duy nhất là cách của bài #4. Tức là bạn phải duyệt cả collection và so sánh tên để lấy đúng form TenForm = UCase(TenForm) For Each Frm in UserForm If UCase(Frm.Name) = TenForm Then Set miFrm = Frm Next Frm If Not miFrm Is Nothing Then _ CallByName miFrm, TenMethod, vbMethod Hoặc bạn dùng một wrapper. Đặt một Public Global Collection (Dictionary cũng được) ở Moule chính,. Mỗi lần mở một UserForm thì bạn add nó vào Collection, với Form và tên Form. Cái Wrapper này sẽ giúp bạn có thể truy cập thẳng theo tên. Upvote 0
truongvu317
Thành viên tích cực

Tham gia 15/11/10 Bài viết 957 Được thích 699 Giới tính Nữ VetMini đã viết: Tôi thử một chút, và "tạm" tin rằng do cái collection UserForms nó chỉ cho truy cập phần tử bằng chỉ số chứ không chịu dùng tên. Vì vậy cách truy cập duy nhất là cách của bài #4. Tức là bạn phải duyệt cả collection và so sánh tên để lấy đúng form TenForm = UCase(TenForm) For Each Frm in UserForm If UCase(Frm.Name) = TenForm Then Set miFrm = Frm Next Frm If Not miFrm Is Nothing Then _ CallByName miFrm, TenMethod, vbMethod Hoặc bạn dùng một wrapper. Đặt một Public Global Collection (Dictionary cũng được) ở Moule chính,. Mỗi lần mở một UserForm thì bạn add nó vào Collection, với Form và tên Form. Cái Wrapper này sẽ giúp bạn có thể truy cập thẳng theo tên. Nhấp chuột vào đây để mở rộng...Sư phụ Vẹt nhỏ có nghĩ tới chuyện cùng lúc mở hai file excel, và hai file excel ý có hai cái form nó cùng tên, form nào hay hay là chau hay copy vào nhiều file để dùng, bản tính lười nó khổ thế đó. Gặp phải vụ đó nó lại bắt nhầm "vợ" thì khổ nhà trai. Upvote 0
giaiphap
==(^o^)==
Tham gia 12/3/07 Bài viết 5,809 Được thích 6,368 Donate (Momo)
Giới tính Nam truongvu317 đã viết: Sư phụ Vẹt nhỏ có nghĩ tới chuyện cùng lúc mở hai file excel, và hai file excel ý có hai cái form nó cùng tên, form nào hay hay là chau hay copy vào nhiều file để dùng, bản tính lười nó khổ thế đó. Gặp phải vụ đó nó lại bắt nhầm "vợ" thì khổ nhà trai. Nhấp chuột vào đây để mở rộng...Kết hợp với cái này là giải quyết được ngay.
VBA Express : Excel - List All UserForm Names in Your Project
List All UserForm Names in Your Project This will display in a message box all Userforms names currently in a project. www.vbaexpress.com Upvote 0 Bạn phải đăng nhập hoặc đăng ký để trả lời bài viết tại đây.Bài viết mới nhất
- Nguyenkhang2404
- 24/7/25
- Hàm và công thức Excel
- Mr_Siro
- Hôm nay lúc 10:57
- Giải thích, gỡ rối, xử lý lỗi công thức
- ptthuongtn
- 59 phút trước
- Hàm và công thức Excel
- skygatevn
- Hôm nay lúc 11:59
- Hướng dẫn sử dụng các hàm trong Excel
- PhanTuHuong
- 10/12/25
- Câu lạc bộ hoạt động xã hội
- dieppk.nb92
- Chủ nhật lúc 01:22
- Hàm và công thức Excel
- PhanTuHuong
- Chủ nhật lúc 23:46
- Thư giãn
- GPE-Trợ Lý
- 24/11/25
- Câu lạc bộ hoạt động xã hội
- Đã giải quyết
- HeSanbi
- 30/5/20
- Lập Trình với Excel
- phamdinh.huy.aladin@gmail
- Thứ hai lúc 10:18
- Hàm và công thức Excel
- kaoehtkid
- Thứ hai lúc 19:04
- Những vấn đề chung
- Question Question
- duongnhuxuyen
- Thứ sáu lúc 15:39
- Lập Trình với Excel
- Question Question
- ongke0711
- 6/10/24
- Lập Trình với Excel
- Đã giải quyết
- eagle12
- 8/12/25
- Lập Trình với Excel
- HeSanbi
- Thứ bảy lúc 15:41
- Xử lý chuỗi ký tự
- H_P
- Thứ bảy lúc 14:23
- Tìm kiếm, dò tìm và tham chiếu
- Ngựa con 2002
- Thứ bảy lúc 23:07
- Xử lý chuỗi ký tự
- QUANSUNG
- Thứ bảy lúc 10:55
- Hàm và công thức Excel
- huuthang_bd
- 30/12/13
- Xây dựng ứng dụng.
- Dinh Hong Nhung
- Thứ năm lúc 10:36
- Hàm và công thức Excel
Thành viên có số lượng bài viết cao nhất tháng
- Maika8008 33
- thanthanhan 21
- dungpham01 19
- eagle12 16
- ongke0711 16
- nguyenanhtruong2409 14
- Phan Thế Hiệp 13
- ptm0412 13
- HUONGHCKT 12
- vic_it 11
- nhhnam 10
- pycckuu410 10
- Vũ Hải Sơn 9
- dieppk.nb92 8
- HeSanbi 8
- bsbnhh 7
- Gà Con yêu VBA 7
- Hana2610 6
- duongnhuxuyen 6
- Mr.hieudoanxd 5
Thành viên có điểm tương tác cao nhất tháng
- Phan Thế Hiệp 63
- Maika8008 26
- thanthanhan 18
- ongke0711 17
- ptm0412 15
- HeSanbi 12
- dungpham01 11
- HUONGHCKT 9
- Cúc Hr 8
- eagle12 8
- dieppk.nb92 6
- Mr.hieudoanxd 5
- pycckuu410 5
- befaint 5
- Phuocam 4
- SA_DQ 4
- nguyenanhtruong2409 4
- nhhnam 2
- Gà Con yêu VBA 2
- huuthang_bd 2
Thời gian đếm ngược.
000 Ngày 00 Giờ 00 phút 00 giây Thân mời tham dự sự kiện sinh nhật GPE 2025- Trang chủ
- Diễn đàn
- Lập Trình với Excel
- Website này sử dụng cookies. Tiếp tục sử dụng trang này, đồng nghĩa với việc bạn chấp nhận website sử dụng cookies. Chấp nhận Tìm hiểu thêm.…
Từ khóa » Gọi Userform Trong Vba
-
Hướng Dẫn Cách Gọi Ra Một Userform Và Gán Lệnh Gọi Userform ...
-
Hướng Dẫn Cách đóng Hoàn Toàn Userform Trong VBA Excel
-
UserForm Trong VBA: Cách Tạo Và Sử Dụng Form Excel
-
UserForm VBA Và 2 Cách Tạo Giao Diện Người Dùng Trong Excel
-
1️⃣【Hướng Dẫn Cách Gọi Ra Một Userform Và Gán Lệnh Gọi ...
-
Cách Tạo Userform đẹp Trong Excel Vba Với Hiệu ứng Button Thay đổi ...
-
Hướng Dẫn Cách Tạo UserForm Trong VBA Excel Chi Tiết Nhất
-
VBA Macro - Bài 16 - Đối Tượng User Form - Lớp Học Vi Tính
-
Làm Việc Với UserForms Trong Excel 2016 VBA
-
Thầy Khi E Gọi Userform Lên Nó Báo Lỗi Vậy Là Sao ạ Thầy Giúp E Với
-
Hướng Dẫn Chi Tiết Các Bước Tạo Form Nhập Liệu Bằng VBA Excel
-
Thêm Hàng Loạt Control Trong USERFORM-2021 - Tin Học Văn Phòng
-
Sử Dụng Double Click VBA Excel - Phần Mềm FREE
-
Userform (form Người Dùng) Trong VBA Excel - Tài Liệu Text - 123doc