Xin giúp đỡ combobox userform trên excel

Liên hệ QC

Mr_Fly

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
3/6/21
Bài viết
43
Được thích
3
chào mọi người.
Hiện tại mình đang làm 1 userform nhập liệu các trường thông tin thuộc tính. Tỉnh, Huyện, Xã, Tên công ty.
mình đang gặp 2 vấn đề chưa biết cách giải quyết ra sao.
1- tựa động search như search google khi mà gõ 1 kí tự bất kì nào vào combobox thì nó sẽ list ra 1 danh sách các từ có kí tự đó. còn nếu không có từ nào thì sẽ list ra là danh sách trắng.
2- mình muốn liên kết 3 combobox tỉnh, huyện, xã lại với nhau. làm sao khi mà mình chọn tỉnh -> thì khi mình click vào combobox huyện nó chỉ hiện lên các huyện của tỉnh đó. tương tự với xã.
3. khi tất cả các thông tin đó được điền thì nhất nút thêm nó sẽ thêm tự động vào listbox phía dưới và cũng tự động lưu vào trong sheet data luôn.
và có 1 số chức năng như sửa, xóa.
trong file mình hiện đang fix cứng rowsource của nó. lần đầu code VBA nên chưa rõ như nào. tính fix cứng để code nhanh hơn mà lại khó quá.
mình gửi file đính kèm, mong mọi người giúp đỡ.
 

File đính kèm

  • formtest.xlsm
    486.9 KB · Đọc: 10
Trong file của bạn mới có mã tỉnh (thành phố) thôi;
Bạn cần có mã của quận, huyện & mã phường xã như vầy nữa:

Tỉnh Thành PhốMã TPQuận HuyệnMã QHPhường XãMã PX
Thành phố Hà Nội29Quận Ba Đình2901Phường Phúc Xá290101
Thành phố Hà Nội29Quận Ba Đình2901Phường Trúc Bạch290102
Thành phố Hà Nội29Quận Ba Đình2901Phường Vĩnh Phúc290103
Thành phố Hà Nội29Quận Ba Đình2901Phường Cống Vị290104
Thành phố Hà Nội29Quận Ba Đình2901Phường Liễu Giai290105
Thành phố Hà Nội29Quận Ba Đình2901Phường Nguyễn Trung Trực290106
Thành phố Hà Nội29Quận Ba Đình2901Phường Quán Thánh290107
Thành phố Hà Nội29Quận Ba Đình2901Phường Ngọc Hà290108
Thành phố Hà Nội29Quận Ba Đình2901Phường Điện Biên290109
Thành phố Hà Nội29Quận Ba Đình2901Phường Đội Cấn290110
Thành phố Hà Nội29Quận Ba Đình2901Phường Ngọc Khánh290111
Thành phố Hà Nội29Quận Ba Đình2901Phường Kim Mã290112
Thành phố Hà Nội29Quận Ba Đình2901Phường Giảng Võ290113
Thành phố Hà Nội29Quận Ba Đình2901Phường Thành Công290114
Thành phố Hà Nội29Quận Hoàn Kiếm2902Phường Phúc Tân290201
Thành phố Hà Nội29Quận Hoàn Kiếm2902Phường Đồng Xuân290202

Bạn tham khảo thêm file đính kèm & chúc vui!
 

File đính kèm

  • Form.rar
    365 KB · Đọc: 38
Upvote 0
Trong file của bạn mới có mã tỉnh (thành phố) thôi;
Bạn cần có mã của quận, huyện & mã phường xã như vầy nữa:

Tỉnh Thành PhốMã TPQuận HuyệnMã QHPhường XãMã PX
Thành phố Hà Nội29Quận Ba Đình2901Phường Phúc Xá290101
Thành phố Hà Nội29Quận Ba Đình2901Phường Trúc Bạch290102
Thành phố Hà Nội29Quận Ba Đình2901Phường Vĩnh Phúc290103
Thành phố Hà Nội29Quận Ba Đình2901Phường Cống Vị290104
Thành phố Hà Nội29Quận Ba Đình2901Phường Liễu Giai290105
Thành phố Hà Nội29Quận Ba Đình2901Phường Nguyễn Trung Trực290106
Thành phố Hà Nội29Quận Ba Đình2901Phường Quán Thánh290107
Thành phố Hà Nội29Quận Ba Đình2901Phường Ngọc Hà290108
Thành phố Hà Nội29Quận Ba Đình2901Phường Điện Biên290109
Thành phố Hà Nội29Quận Ba Đình2901Phường Đội Cấn290110
Thành phố Hà Nội29Quận Ba Đình2901Phường Ngọc Khánh290111
Thành phố Hà Nội29Quận Ba Đình2901Phường Kim Mã290112
Thành phố Hà Nội29Quận Ba Đình2901Phường Giảng Võ290113
Thành phố Hà Nội29Quận Ba Đình2901Phường Thành Công290114
Thành phố Hà Nội29Quận Hoàn Kiếm2902Phường Phúc Tân290201
Thành phố Hà Nội29Quận Hoàn Kiếm2902Phường Đồng Xuân290202

Bạn tham khảo thêm file đính kèm & chúc vui!
bạn có thể xử lý luôn trên file của mình giúp mình được không?
 
Upvote 0
Chắc được, sau khi mình được tiêm chủng ngừa Covid19!
$$$$@
 
Upvote 0
/(hông biết nữa, con bé nhà mình: "Con đăng ký vaccine pfizer; Phải chờ 1 thời gian, có thể cuối tháng 7"
Cũng mong là tháng 7 năm sau! /-(A, HA, Ha, ha, . . . . . .
 
Upvote 0
t thực sự không rõ về VBA nên mới phải đi hỏi mọi người :(
Bài đã được tự động gộp:

mọi người cho mình hỏi. mình có làm 1 user form như này.
1627284982129.png
sau đó mình có viết 1 marco cho nút bấm như này,
Sub open_uf()
Form_data01.Show
End Sub

nhưng khi t chạy marco này thì chương trình của t báo lỗi với thông tin là Form_data01 của t chưa được defini
mọi người biết là vấn đề do đâu không?
 
Lần chỉnh sửa cuối:
Upvote 0
t thực sự không rõ về VBA nên mới phải đi hỏi mọi người :(
Bài đã được tự động gộp:

mọi người cho mình hỏi. mình có làm 1 user form như này.
View attachment 263046
sau đó mình có viết 1 marco cho nút bấm như này,
Sub open_uf()
Form_data01.Show
End Sub

nhưng khi t chạy marco này thì chương trình của t báo lỗi với thông tin là Form_data01 của t chưa được defini
mọi người biết là vấn đề do đâu không?
Đoán thử một chút: "nhưng khi tao chạy marco này thì chương trình của tao báo lỗi"
 
Upvote 0
/(hông biết nữa, con bé nhà mình: "Con đăng ký vaccine pfizer; Phải chờ 1 thời gian, có thể cuối tháng 7"
Cũng mong là tháng 7 năm sau! /-(A, HA, Ha, ha, . . . . . .
chương trình của bạn lỗi mà, lúc change huyện mà nhớ ra sai tỉnh change lại tỉnh chương trình lỗi luôn.
Bài đã được tự động gộp:

Đoán thử một chút: "nhưng khi tao chạy marco này thì chương trình của tao báo lỗi"
bạn giúp được mình thì bạn giúp. mình hỏi có thiện chí và mong có người hiểu chỉ điểm, chứ ngồi không soi mói nhau thì bạn đi ra ngoài giúp mình
 
Upvote 0
Còn macro của bạn đang bị lỗi tại đây:

PHP:
Private Sub UserForm_Initialize()
Const Rt As Byte = 6:         On Error GoTo LoiCT
 
 Label4.Caption = ThisWorkbook.Sheets(2).Cells(Rt, 1).Value
 Label5.Caption = ThisWorkbook.Sheets(2).Cells(Rt, 2).Value
 Label6.Caption = ThisWorkbook.Sheets(2).Cells(Rt, 3).Value
1 Label7.Caption = ThisWorkbook.Sheets(2).Cells(Rt, 4).Value
2 Call lblistbox
Err_:          Exit Sub
LoiCT:
    MsgBox Err, , Erl
    Resume Err_
End Sub

Có nghĩa là Sub lbListBox đang bị lỗi
Bài đã được tự động gộp:

Tiếp tục chu trình phát giác lỗi như vậy tại macro dẫn ra dưới đây ta đã phát hiện ra dòng lỗi

PHP:
Sub lblistbox()
 Dim Rend As Integer, I    As Integer, cnt_Tem As Integer
 Dim arrthVba, Brr As Variant:        Dim Temp    As String
 Const Rt As Byte = 6
 Const cnkTem    As String = "Kiêm Tra Phân Mêm"
 On Error GoTo Loi_CT 
1 Temp = UniConvert(cnkTem, "Telex")
 Rend = ThisWorkbook.Sheets("data").Cells(Rows.Count, 2).End(xlUp).Row
3 If Rend <= Rt Then Exit Sub
4 arrthVba = ThisWorkbook.Sheets("data").Range(Cells(Rt, 1), Cells(Rend, 8)).Value
5 MsgBox "Yes"
 With Form_data01.ListBox1
7    .Clear:                                 .ColumnCount = 4
    .ColumnWidths = "60;268;60;60"
9    .ListStyle = fmListStyleOption:         .MultiSelect = False
    cnt = 0
    For I = LBound(arrthVba, 1) To UBound(arrthVba, 1) Step 1
        If CStr(arrthVba(I, 7)) = Temp Then
            .AddItem CStr(arrthVba(I, 1)):   .List(cnt_Tem, 1) = "b"
            .List(cnt_Tem, 1) = CStr(arrthVba(I, 2))
            .List(cnt_Tem, 2) = CStr(arrthVba(I, 3))
            cnt_Tem = cnt_Tem + 1
        End If
    Next I
 End With
Loi_:   Exit Sub
Loi_CT:
    MsgBox Err, , Erl:         Resume Loi_
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Còn macro của bạn đang bị lỗi tại đây:

PHP:
Private Sub UserForm_Initialize()
Const Rt As Byte = 6:         On Error GoTo LoiCT
 
 Label4.Caption = ThisWorkbook.Sheets(2).Cells(Rt, 1).Value
 Label5.Caption = ThisWorkbook.Sheets(2).Cells(Rt, 2).Value
 Label6.Caption = ThisWorkbook.Sheets(2).Cells(Rt, 3).Value
1 Label7.Caption = ThisWorkbook.Sheets(2).Cells(Rt, 4).Value
2 Call lblistbox
Err_:          Exit Sub
LoiCT:
    MsgBox Err, , Erl
    Resume Err_
End Sub

Có nghĩa là Sub lbListBox đang bị lỗi
Bài đã được tự động gộp:

Tiếp tục chu trình phát giác lỗi như vậy tại macro dẫn ra dưới đây ta đã phát hiện ra dòng lỗi

PHP:
Sub lblistbox()
 Dim Rend As Integer, I    As Integer, cnt_Tem As Integer
 Dim arrthVba, Brr As Variant:        Dim Temp    As String
 Const Rt As Byte = 6
 Const cnkTem    As String = "Kiêm Tra Phân Mêm"
 On Error GoTo Loi_CT
1 Temp = UniConvert(cnkTem, "Telex")
 Rend = ThisWorkbook.Sheets("data").Cells(Rows.Count, 2).End(xlUp).Row
3 If Rend <= Rt Then Exit Sub
4 arrthVba = ThisWorkbook.Sheets("data").Range(Cells(Rt, 1), Cells(Rend, 8)).Value
5 MsgBox "Yes"
 With Form_data01.ListBox1
7    .Clear:                                 .ColumnCount = 4
    .ColumnWidths = "60;268;60;60"
9    .ListStyle = fmListStyleOption:         .MultiSelect = False
    cnt = 0
    For I = LBound(arrthVba, 1) To UBound(arrthVba, 1) Step 1
        If CStr(arrthVba(I, 7)) = Temp Then
            .AddItem CStr(arrthVba(I, 1)):   .List(cnt_Tem, 1) = "b"
            .List(cnt_Tem, 1) = CStr(arrthVba(I, 2))
            .List(cnt_Tem, 2) = CStr(arrthVba(I, 3))
            cnt_Tem = cnt_Tem + 1
        End If
    Next I
 End With
Loi_:   Exit Sub
Loi_CT:
    MsgBox Err, , Erl:         Resume Loi_
End Sub
mình vừa debug rồi. lỗi đang phát sinh ở 2 dòng arrthVba = ThisWorkbook.Sheets("data").Range(Cells(Rt, 1), Cells(Rend, 8)).Value
và With Form_data01.ListBox1
bạn có thể cho mình biết vì sao lại bị lỗi được không?
 
Upvote 0
mình vừa debug rồi. lỗi đang phát sinh ở 2 dòng (2) arrthVba = ThisWorkbook.Sheets("data").Range(Cells(Rt, 1), Cells(Rend, 8)).Value
và (1) With Form_data01.ListBox1
bạn có thể cho mình biết vì sao lại bị lỗi được không?
(2) Bạn đang đứng ở 1 trang tính khác (không phải ở trang tính 'Data") mà viết vây là bị VBE cự nự ngay
Bạn có thể thử bỡi dòng lệnh này để trước dòng lệnh đó xem nó đưa ra cho bạn thông tin gì:
Mã:
  MsgBox Cells(Rt, 1).Address, , Cells(Rend, 8).Parent.Name

(1) Bỡi dòng lệnh chắc chắn đang lỗi, nên gọi macro có chứa dòng lệnh lỗi sẽ là dòng lệnh lỗi

(3) Bạn nên xài MsgBox ở khắp nơi, 1 khi có lỗi
(3.1) & như vậy mình khuyên bạn: Đừng bao giờ xài
PHP:
On Error Resume Next
Theo mình dòng lệnh này làm các câu lệnh chứa sau nó ẩn chứa nhiều rủi hơn là may
(3.2) Vậy câu lệnh này đưa ra làm gì?
- Nó dành cho những người biết rõ hay phân biệt được lỗi sẽ ở đâu & lỗi gì
Ví dụ:
PHP:
Sub lblistbox()
 Dim Rend As Integer, I    As Integer, cnt_Tem As Integer
 Dim arrthVba, Brr As Variant, Sh As Object
 Dim Temp    As String:                         Const Rt As Byte = 6
 Const cnkTem    As String = "Kiêm Tra Phân Mêm"
 On Error GoTo Loi_CT
 1
2' . . . . . . . .     '
' . . . . . . . . 3     '
4' . . . . . . . .     '
Loi_:   Exit Sub
Loi_CT:
    If Err <> 1004 Then
        MsgBox Err, , Erl:        Resume Loi_
    Else
        Resume Next
    End If
End Sub



Vui nha!
 
Lần chỉnh sửa cuối:
Upvote 0
cái lỗi này qua debug mình xử nó xong rồi, nhưng dù sao cũng cảm ơn bạn.
Bài đã được tự động gộp:

mình muốn qua lại chủ đề tỉnh huyện xã mà ban đầu mình có hỏi. mình đang hướng làm là ta sẽ viết 1 hàm filter cho danh sách huyện khi chọn tỉnh nào thì nó sẽ ra huyện xã tỉnh đó. ( cái này thì mình làm oke rồi)
đang vướng chỗ là mình dùng cột data huyện mới đó mình đẩy rowsource vào combobox của huyện.
mình dùng phương thức đẩy theo địa chỉ.
combobox1.rowsource = sheet(1).range("D2:D20000").value
tuy nhiên khi chạy thì combobox của mình không hiện ra được kq, mặc dù cột D đã đẩy được data vào?
vđ này là do đâu?
 
Upvote 0
Bạn đã có nguồn cho comboBox chọn tỉnh;
Khi bấm chọn 1 dòng trong danh sách sổ xuống của Combo này, là ta đồng thời tao danh sách sổ xuống làm nguồn cho ComboBox Huyện
Bạn xem file & tiếp tục di nha.
 
Upvote 0
Bạn đã có nguồn cho comboBox chọn tỉnh;
Khi bấm chọn 1 dòng trong danh sách sổ xuống của Combo này, là ta đồng thời tao danh sách sổ xuống làm nguồn cho ComboBox Huyện
Bạn xem file & tiếp tục di nha.
file của bạn bị lỗi, bạn đã debug cho nó chưa?
Bài đã được tự động gộp:

còn cái t đang hỏi ở đây là việc gán rowsource cho combobox tự động. make sure vấn đề rồi cùng bàn luận
 
Upvote 0
Cảm ơn bạn đã nhắc mình vài ba lần & mình sau chích ngừa sẽ lưu í đến vấn đề này!

:D :D :D
 
Upvote 0
Tôi ban nick @Mr_Fly 1 tháng do sử dụng từ ngữ thô tục và lăng mạ thành viên khác.

1627379964985.png
 
Upvote 0
Web KT

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

Back
Top Bottom