Xin trợ giúp-nhập và trích xuất dữ liệu với userform (1 người xem)

Người dùng đang xem chủ đề này

nnn123nnn

Thành viên mới
Tham gia
10/10/11
Bài viết
16
Được thích
0
Mến chào các thầy, các anh chị và các bạn trên diễn đàn GPE,
Em là nhân viên kinh doanh của một công ty bảo hiểm. Do nhu cầu quản lý thông khách hàng cũng như lên kế hoạch tặng quà sinh nhật và nhắc nhở khách hàng đóng phí đúng hẹn một cách nhanh chóng và khoa học, em có tìm hiểu và làm một userForm để nhập và trích xuất dữ liệu khách hàng. Tuy nhiên, do thông tin và năng lực hạn hẹp, em khó lòng hoàn thành theo ý muốn. Em có viết đề xuất giúp đỡ chi tiết trong file đính kèm.
Nay em mạo muội đăng bài này, rất mong nhận được sự quan tâm và giúp đỡ của các thầy, các anh chị và các bạn trên diễn đàn GPE trong thời gian sớm.
Em xin cảm ơn ạ.
 

File đính kèm

mọi người ơi, xin giúp dùm em với ạ, không phải em lười nhưng thật sự sức em chỉ đến được đây thôi ạ :(
 
Upvote 0
rất mong nhận được sự phản hồi của các anh chị và các thầy trên diễn đàn ạ
 
Upvote 0
rất mong nhận được sự phản hồi của các anh chị và các thầy trên diễn đàn ạ

Số thành viên đọc bài là gần 300 và số thành viên tải File là 10 nhưng chưa ai giúp vì các nguyên nhân sau:

- Cách thiết kế sheet khách hàng quá rườm rà, ví dụ các tiêu đề: BMBH, NĐBH, NĐBH BỔ SUNG 1, NĐBH BỔ SUNG 2, NTH 1, NTH 2, SP chính, SP bổ sung. Có tiêu đề là giống nhau thì nên làm 1 tiêu đề và nhập dữ liệu theo chiều dọc xuống và chỉ thêm 1 cột với tiêu đề là loại và dùng Combo để chọn 1 loại. Các chữ viết tắt bạn nên có giải thích để người giúp hiểu nội dung bạn cần.

- Nên thiết kế Form nhập liệu, chỉnh sửa chung 1 Form (như tôi góp là 1 tiêu đề) thì không cần dùng đến MultiPage đâu. Các Control bạn nên đặt theo quy ước để thuận tiện cho viết và kiểm tra Code.

- Bạn nên nhờ từng phần thì may ra mỗi người giúp 1 tí sau đó gộp lại thành 1 File, chứ nhờ nguyên 1 File thì nhiều quá không ai rảnh thời gian để giúp bạn từ A đến Z.

- Trong File nên có khoảng 20 dòng dữ liệu để người giúp có cái mà kiểm tra.
 
Upvote 0
Số thành viên đọc bài là gần 300 và số thành viên tải File là 10 nhưng chưa ai giúp vì các nguyên nhân sau:

- Cách thiết kế sheet khách hàng quá rườm rà, ví dụ các tiêu đề: BMBH, NĐBH, NĐBH BỔ SUNG 1, NĐBH BỔ SUNG 2, NTH 1, NTH 2, SP chính, SP bổ sung. Có tiêu đề là giống nhau thì nên làm 1 tiêu đề và nhập dữ liệu theo chiều dọc xuống và chỉ thêm 1 cột với tiêu đề là loại và dùng Combo để chọn 1 loại. Các chữ viết tắt bạn nên có giải thích để người giúp hiểu nội dung bạn cần.

- Nên thiết kế Form nhập liệu, chỉnh sửa chung 1 Form (như tôi góp là 1 tiêu đề) thì không cần dùng đến MultiPage đâu. Các Control bạn nên đặt theo quy ước để thuận tiện cho viết và kiểm tra Code.

- Bạn nên nhờ từng phần thì may ra mỗi người giúp 1 tí sau đó gộp lại thành 1 File, chứ nhờ nguyên 1 File thì nhiều quá không ai rảnh thời gian để giúp bạn từ A đến Z.

- Trong File nên có khoảng 20 dòng dữ liệu để người giúp có cái mà kiểm tra.

Trước hết, em xin phép cám ơn thành viên be09. Vì em chưa được biết thành viên be09 là nam hay nữ, và tuổi tác ra sao nên cho phép em xưng hô “ bác-em”
Về góp ý của bác, em xin phép giải trình như sau:
1/ Em giải thích các từ em viết tắt trước, như từ đầu em đã nêu, em làm bên bảo hiểm
BMBH: Bên mua bảo hiểm (tên riêng)
NĐBH: người được bảo hiểm (tên riêng)
NĐBH BS: người được bảo hiểm bổ sung (tên riêng)
TVTC: tư vấn viên (tên riêng)
NTH: người thừa hưởng
SP chính: tên sản phẩm chính (chương trình chính)
SP bổ sung: tên sản phẩm bổ sung (chương trình phụ kèm theo)
Số HĐ: mã số hợp đồng
Mã TV: mã số nhân viên
Ví dụ 1 gia đình có 4 thành viên, người chồng mua bảo hiểm tử vong cho người vợ, và mua thêm 1 chương trình tai nạn cho người con lớn, người con nhỏ được chỉ định là người thừa hưởng hợp đồng. Vậy người cha là BMBH, người mẹ là NĐBH, người con lớn là NĐBH BS, người con nhỏ là NTH.
Về phần trình bày, lúc đầu em cũng có ý định làm như ý bác hướng dẫn, nhưng em thấy vướng mắc 1 chỗ là bên em quản lý thông tin khách hàng theo từng hợp đồng. Mỗi hợp đồng chứa tất cả thông tin BMBH, NĐBH, NĐBH BS, NTH. Nên nếu em làm thông tin cá nhân thành chiều dọc thì em rối trong việc sắp xếp tiêu đề để dễ phân biệt từng nhóm người trong 1 hợp đồng.
Giống như chúng ta đang quản lý nhiều cái sổ hộ khẩu, mà trong mỗi hộ khẩu lại có nhiều người, cùng một địa chỉ, nhưng khác ngày tháng năm sinh, khác số cmnd, khác giới tính… vậy đó bác ạ.
Nhưng không nhất thiết điền hết, giống như nhà có nhiều người, nhà thì neo người vậy bác ạ
Mong bác có hướng dẫn “nhẹ” cụ thể như ví dụ 1 vài dòng, giúp em “sáng” ra, rồi em sẽ làm theo đầy đủ rồi up file lên lại ạ
2/ Về phần thiết kế form nhập liệu và chỉnh sửa chung, em cũng làm lúc đầu tập thiết form, tuy nhiên em thấy khó khăn 1 chỗ là em hậu đậu quá, em không mong muốn vô tình làm thay đổi dữ liệu gốc.
Em mong muốn form nhập liệu thì chỉ dùng để nhập, nếu có lỡ nhập thông tin mới vào dữ liệu cũ, thì vẫn hiểu là dữ liệu mới, ghi thành 1 dòng độc lập, không ghi chèn và thay thế dữ liệu cũ.
Nhờ bác có hình gợi ý hay có hướng nào trực quan hơn, em sẽ cố gắng làm theo ạ
3/ File của em vì nó liên đới nhau, nên em mới nghĩ up lên một lần thì mọi người dể hình dung hơn, nhưng với sự góp ý của bác, em chân thành cám ơn, và thật ra em chỉ mong mấy anh chị giúp em trước phần nhập liệu là em vui lắm rồi
Một lần nữa, em rất mong sự hướng dẫn của các anh chị và các thầy trên GPE, do em tối dạ, và không có am hiểu nhiều về form hay VBA, nên có nhiều lúc không hiểu ý hay chưa diễn đạt được ý của em, có sai sót mong được thông cảm
 

File đính kèm

Upvote 0
Vì bài của bạn có nhiều vấn đề nên mình làm thử phần nhập ngày tháng năm vào combobox1, combobox2, textbox65. Hai Combobox này bạn để property Style là 2-frmStyleDropdownList để không cho nhập dữ liệu, chỉ cho phép chọn. Combobox2 chứa tháng bạn đặt property Row source là DATA!B2:B13 để tự động nạp các tháng. Combobox1 không nên load ngày từ sheet DATA vào vì ứng với tháng, năm nhất định thì số ngày trong tháng đó khác nhau.
Mã:
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 31
ComboBox1.AddItem i
Next
ComboBox1.ListIndex = 0
ComboBox2.ListIndex = 0
End Sub

Private Sub TextBox65_Change()
If Not IsNumeric(TextBox65.Text) Then TextBox65.Text = ""
ComboBox2_Change
End Sub

Private Sub ComboBox2_Change()
Dim lastday As Integer, i As Integer, nam As Integer
If TextBox65.Text = "" Then nam = 0 Else nam = CInt(TextBox65.Text)
lastday = Day(DateSerial(nam, ComboBox2.Value + 1, 1) - 1)
If ComboBox1.Value > lastday Then ComboBox1.Value = lastday
If ComboBox1.ListCount > lastday Then
For i = lastday To ComboBox1.ListCount - 1
ComboBox1.RemoveItem (lastday)
Next
ElseIf ComboBox1.ListCount < lastday Then
For i = ComboBox1.ListCount + 1 To lastday
ComboBox1.AddItem i
Next
End If
End Sub
Hàm để lấy ngày tháng năm là Dateserial(Textbox65.Text, Combobox2.Value, Combobox1.Value)
 
Upvote 0
Theo quan điểm của tôi thì cách thiết kế vẫn như bài viết trước mỗi nội dung bảo hiểm nhập liệu 1 dòng, chỉ riêng TVTC, Số HĐ, Mã TV, SP chính, SP bổ sung sử dụng chung cho mỗi dòng (ứng với cái nào thì chọn cái đó).

Sau khi nhập liệu xong thì Sort Số HĐ để chúng nằm chung cho dễ nhìn và dễ kiểm soát, muốn biết hợp đồng nào tương ứng với cái gì (như bạn nêu nhiều phần cần nhập liệu) thì sử dụng PivotTable nó sẽ ra kết quả như bạn cần nhập liệu như File của bạn.

Do tôi đang đi công tác nên chưa có thời gian, thứ bảy chúa nhật rảnh sử dụng máy nhà tôi sẽ thiết kế lại và đưa ra ví dụ kèm File để bạn tham khảo.

Còn vấn đề bạn hỏi: Tôi là nam hay nữ, và tuổi bao nhiêu?

Trả lời:
- Giới tính: Nam.
- Tuổi: Sắp hưu.
 
Lần chỉnh sửa cuối:
Upvote 0
Vì bài của bạn có nhiều vấn đề nên mình làm thử phần nhập ngày tháng năm vào combobox1, combobox2, textbox65. Hai Combobox này bạn để property Style là 2-frmStyleDropdownList để không cho nhập dữ liệu, chỉ cho phép chọn. Combobox2 chứa tháng bạn đặt property Row source là DATA!B2:B13 để tự động nạp các tháng. Combobox1 không nên load ngày từ sheet DATA vào vì ứng với tháng, năm nhất định thì số ngày trong tháng đó khác nhau.
Mã:
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 31
ComboBox1.AddItem i
Next
ComboBox1.ListIndex = 0
ComboBox2.ListIndex = 0
End Sub

Private Sub TextBox65_Change()
If Not IsNumeric(TextBox65.Text) Then TextBox65.Text = ""
ComboBox2_Change
End Sub

Private Sub ComboBox2_Change()
Dim lastday As Integer, i As Integer, nam As Integer
If TextBox65.Text = "" Then nam = 0 Else nam = CInt(TextBox65.Text)
lastday = Day(DateSerial(nam, ComboBox2.Value + 1, 1) - 1)
If ComboBox1.Value > lastday Then ComboBox1.Value = lastday
If ComboBox1.ListCount > lastday Then
For i = lastday To ComboBox1.ListCount - 1
ComboBox1.RemoveItem (lastday)
Next
ElseIf ComboBox1.ListCount < lastday Then
For i = ComboBox1.ListCount + 1 To lastday
ComboBox1.AddItem i
Next
End If
End Sub
Hàm để lấy ngày tháng năm là Dateserial(Textbox65.Text, Combobox2.Value, Combobox1.Value)

Cám ơn bác rất nhiều a
 
Upvote 0
Theo quan điểm của tôi thì cách thiết kế vẫn như bài viết trước mỗi nội dung bảo hiểm nhập liệu 1 dòng, chỉ riêng TVTC, Số HĐ, Mã TV, SP chính, SP bổ sung sử dụng chung cho mỗi dòng (ứng với cái nào thì chọn cái đó).

Sau khi nhập liệu xong thì Sort Số HĐ để chúng nằm chung cho dễ nhìn và dễ kiểm soát, muốn biết hợp đồng nào tương ứng với cái gì (như bạn nêu nhiều phần cần nhập liệu) thì sử dụng PivotTable nó sẽ ra kết quả như bạn cần nhập liệu như File của bạn.

Do tôi đang đi công tác nên chưa có thời gian, thứ bảy chúa nhật rảnh sử dụng máy nhà tôi sẽ thiết kế lại và đưa ra ví dụ kèm File để bạn tham khảo.

Còn vấn đề bạn hỏi: Tôi là nam hay nữ, và tuổi bao nhiêu?

Trả lời:
- Giới tính: Nam.
- Tuổi: Sắp hưu.

Cám ơn bác rất nhiều ạ, con giới tính nam, chỉ mới 25 tuổi thôi ạ, con rất hy vọng được thêm sự chỉ dẫn giúp đỡ của bác
 
Upvote 0
Mình thêm code nút Ghi dữ liệu ở tab1, ghi xong sẽ unload rồi load lại form, chỉnh sửa lại cách nhập ngày tháng vào combobox1 và 2. Các combobox chỉnh style thành 2-frmdropdownlist. Msgbox dùng unicode mình chưa biết làm, bạn thử tìm hiểu thêm.
PHP:
Private thoat As BooleanPrivate Sub UserForm_Initialize()ComboBox21.RowSource = "DATA!C2:C" & Sheets("DATA").Range("C65536").End(xlUp).RowComboBox22.RowSource = "DATA!D2:D" & Sheets("DATA").Range("D65536").End(xlUp).RowEnd SubPrivate Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)Dim resultIf thoat Then Exit Subthoat = Falseresult = MsgBox("Thoát?", vbOKCancel)If result = vbCancel Then Cancel = TrueEnd SubPrivate Sub TextBox65_Change()If Not IsNumeric(TextBox65.Text) Then TextBox65.Text = ""If ComboBox2.Value = "" Then Exit SubComboBox2_ChangeEnd SubPrivate Sub CommandButton2_Click()Dim i As Integeri = Sheets("KHACH HANG").Range("A65536").End(xlUp).Row + 1With Sheets("KHACH HANG")'Ghi du lieu vao sheet KHACH HHANG dong i.Range("A" & i) = TextBox1.Text.Range("C" & i) = DateSerial(TextBox65.Text, ComboBox2.Value, ComboBox1.Value)'Ghi du lieu vào sheet KHACH HANG dong iEnd WithMsgBox "Xong"thoat = TrueUnload MeUserForm1.ShowEnd SubPrivate Sub ComboBox2_Change()Dim lastday As Integer, i As Integer, nam As IntegerIf TextBox65.Text = "" Then nam = 0 Else nam = CInt(TextBox65.Text)lastday = Day(DateSerial(nam, ComboBox2.Value + 1, 1) - 1)If ComboBox1.Value > lastday Then ComboBox1.Value = lastdayComboBox1.RowSource = "DATA!A2:A" & (lastday + 1)End Sub
Không biết tại sao code không xuống dòng được?
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom