Giúp đỡ Tạo Form Nhập Liệu

Liên hệ QC

babyheomoi

Thành viên thường trực
Tham gia
22/9/13
Bài viết
396
Được thích
91
Chào mọi người, hằng ngày em sẽ phải update số liệu vào 1 file hơi dài và nhiều dòng cột.
Nên em nghĩ tạo Form nhập liệu là giải pháp tốt.
Nhờ mọi người giúp em code form nhập liệu. Em xin tóm tắt như sau:
CỘT A: là ghi chú các cột em sẽ điền vào sheet DATA
CỘT C: giá trị cần điền vào sheet DATA. hiện tại e đã làm với dòng 26 (theo data C3) - với các giá trị được line xanh
Vấn đề 1:
Do các giá trị cần ở cột C không phải lúc nào cũng đủ, có khi có sản lượng, có khi có hóa đơn, có khi có đã thu. Nhưng lại không thể đợi đủ data mới nhập qua sheet Data được,
Do đó em cần tránh nhập đè (ví dụ như có lúc chỉ có đã thu, nhưng sản lượng, hóa đơn em đã nhập trước đó rồi).
Vấn đề 2:
Các số ở cột H I J sẽ bị thay đổi nếu bị insert thêm 1 dòng mới vào dự án
Ví dụ ở dòng 28 e insert thêm 1 dòng thì các dòng > 28 ở cột H I J sẽ bị sai dữ liệu cần lấy hết!
Vậy làm sao cố định được các số này hoặc có giải pháp nào khác!


Em chưa nghĩa ra cách để cảnh báo hoặc là nếu đã có dữ liệu thì bỏ qua, chỉ nhập cột chưa có dữ liệu.
Mong mọi người giúp đỡ, em xin gửi file đính kèm!
 

File đính kèm

  • help_nhap lieu_gpe.xlsx
    207.4 KB · Đọc: 22
Lần chỉnh sửa cuối:
Bài này bạn nên sửa tiêu đề ở góc phải có chỗ sửa tiêu đề. Bạn sửa lại tiêu đề: Giúp đỡ tạo Form nhập liệu. Nói chung là đừng viết hoa, vì vi phạm nội quy thì mấy anh không hỗ trợ cho bạn đâu. Sửa lại tiêu đề cho đúng quy định bạn nhé.
 
Upvote 0
Bài này bạn nên sửa tiêu đề ở góc phải có chỗ sửa tiêu đề. Bạn sửa lại tiêu đề: Giúp đỡ tạo Form nhập liệu. Nói chung là đừng viết hoa, vì vi phạm nội quy thì mấy anh không hỗ trợ cho bạn đâu. Sửa lại tiêu đề cho đúng quy định bạn nhé.
cám ơn ban đã góp ý, mình không để ý chỗ này. Mình đã sửa lại!
 
Upvote 0
Nhìn vô trang 'DuLieu' của bạn hoa cả mắt & cảm giác rằng nó chưa đúng chuẩn cho lắm:
(1) Có cột như cột B chứa 1 lúc 2 loại dữ liệu, theo mình như thế là khó về sau cho máy
(2) Mỗi công trình nên có mã & kèm theo nó là bảng gồm 2 cột: [Mã CT] & cột [tên công trình]
(3) . . . . .
. . . . . . .
Mình không trong nghề nên cũng không góp được bạn nhiều, nhưng chắc bạn phải đầu từ thời gian xây dựng lại CSDL
Mình lấy ví dụ bên nhân sự: Để ghi quá trình công tác hay lên/xuống lương, chức vụ,. . . . người ta hay lập bảng riêng, như

STTMã NVNgàyNội dungHSL. . . .Ghi chú
1NVH00
7/1/1997​
Tổ trưởng1.751.4Bốc xếp
2NVH03
1/17/2001​
F. GĐ3.253.05
3NVH00
1/28/2005​
Trưởng phòng3.05CDKT
... . . .. . . . .
 
Upvote 0
Nhìn vô trang 'DuLieu' của bạn hoa cả mắt & cảm giác rằng nó chưa đúng chuẩn cho lắm:
(1) Có cột như cột B chứa 1 lúc 2 loại dữ liệu, theo mình như thế là khó về sau cho máy
(2) Mỗi công trình nên có mã & kèm theo nó là bảng gồm 2 cột: [Mã CT] & cột [tên công trình]
(3) . . . . .
. . . . . . .
Mình không trong nghề nên cũng không góp được bạn nhiều, nhưng chắc bạn phải đầu từ thời gian xây dựng lại CSDL
Mình lấy ví dụ bên nhân sự: Để ghi quá trình công tác hay lên/xuống lương, chức vụ,. . . . người ta hay lập bảng riêng, như

STTMã NVNgàyNội dungHSL. . . .Ghi chú
1NVH00
7/1/1997​
Tổ trưởng1.751.4Bốc xếp
2NVH03
1/17/2001​
F. GĐ3.253.05
3NVH00
1/28/2005​
Trưởng phòng3.05CDKT
... . . .. . . . .
Hi bác Sa DQ, nhìn vào file ai cũng sẽ rối mắt chứ không phải riêng bác. Em lần đầu mở cũng choáng.
Tuy nhiên, do em không có phải là người quản lý data, file do quá khứ để lại, ảnh hưởng nhiều phòng ban, lại làm thủ công quá nhiều, nên mất thời gian để set up lại.
Do nhiệm vụ của em là theo dõi và nhập mới khi có dữ liệu mới, và cũng chỉ nhập vài cột nên em mới nghĩ dùng Form nhập liệu là hiệu quả nhất.
Hàng tuần em còn phải lấy data này ra lập báo cáo, nhưng chắc cái đó em sẽ để ở topic khác.
Mong mọi người giúp đỡ!
 
Upvote 0
Mình có í tưởng này, & bạn có thể nêu ý kiến cũng như tiếp tục (chép) thêm các control khác cho đủ lễ bộ;
Chú ý tên các control
 

File đính kèm

  • GPE_.rar
    208 KB · Đọc: 18
Upvote 0
Mình có í tưởng này, & bạn có thể nêu ý kiến cũng như tiếp tục (chép) thêm các control khác cho đủ lễ bộ;
Chú ý tên các control
Sori bác, mấy bữa bận quá, với không có laptop để xem ý bác là sao.
Em sẽ tiếp tục hoàn thiện cái form sớm nhờ bác giúp đỡ tiếp nhé!
 
Upvote 0
Bạn tham khảo thiết kế này & cho thêm ý kiến
 

File đính kèm

  • Forms.rar
    210.2 KB · Đọc: 16
Upvote 0
Trước khi bấm nhập ta phải chọn cột nhập trong 2 ComboBox tương ứng (đang ở bên trái TextBox tương ứng)

Còn nếu muốn nhập 1 lúc vô 4 hay 2 cột cùng lúc thì viết trong macro; & như vậy 2 Combox là thừa & sẽ phải thay bằng lbl như những cái dưới chúng nó.
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ, cám ơn bác!
Em còn vấn đề muốn nhờ giúp luôn ạ! Đó là khi em insert 1 dòng thêm vào khi có thay đổi khối lượng, thì địa chỉ ô của dự án ở phía dưới có thể bị thay đổi (Như từ C10 thành C11)
Vậy giả sử với cụm từ "Ctr Khu du lịch nghĩ dưỡng Mỹ Mỹ Resort (Novabeach Cam Ranh) - 106 căn biệt thự - gói 1" đang ở ô C10 trong sheet data. Em thêm 2 dòng ở phía trên C10 đó, thì cụm từ trên sẽ nằm ở C12
Em cần dùng hàm nào hay code vba thế nào để tìm kíem địa chỉ ô của từ đó (để ô J4 bên sheet Nhap Lieu hiện số 12 thay vì sô 10 như hiện tại)
Em cám ơn!
 
Upvote 0
Trước nhất nói về cụm từ "Ctr Khu du lịch nghĩ dưỡng Mỹ Mỹ Resort (Novabeach Cam Ranh) - 106 căn biệt thự - gói 1" của bạn là quá dài để tìm kiếm nó cũng đủ mệt;
Thay vì tìm nó, ta hãy tìm mã của nó, như ví dụ sau:

Mã CTrNội dung mã CT
MM_CR106G1_000Ctr Khu du lịch nghĩ dưỡng Mỹ Mỹ Resort (Novabeach Cam Ranh) - 106 căn biệt thự - gói 1
MM_CR106G1CFTCCtr Khu du lịch nghĩ dưỡng Mỹ Mỹ Resort (Novabeach Cam Ranh) - 106 căn biệt thự - gói 1 - Chi phí tài chính
MMCR075G2_000Ctr Khu du lịch nghĩ dưỡng Mỹ Mỹ Resort (Novabeach Cam Ranh) - 75 căn biệt thự, 26 bungalow - gói 2
MMCR075G2CFTCCtr Khu du lịch nghĩ dưỡng Mỹ Mỹ Resort (Novabeach Cam Ranh) - 75 căn biệt thự, 26 bungalow - gói 2 - Chi phí tài chính

Cột [Mã CTr] cho mỗi dòng là duy nhất & như vậy thay vì tìm cụm từ trong cột [Nội dung mã CT] ta đi tìm cụm từ trong [Mã CTr]
(Bảng này mình thường gọi là 'danh mục'; & nhờ các 'DMuc' này mà file sẽ nhẹ đi phần nào & lẹ làng hơn trong xử lý.

(2) 1 cách nữa với nguy cơ cao hơn & hoàn toàn không khuyến cáo: là trước khi thêm n dòng (bằng VBA) ta cọng thêm chỉ số n vô chỉ số dòng của cụm từ mà trước khi thêm (dòng) ta đã phải xác định.
(. . ) . . . . . . . . .
 
Upvote 0
Dạ, cám ơn bác!
Em còn vấn đề muốn nhờ giúp luôn ạ! Đó là khi em insert 1 dòng thêm vào khi có thay đổi khối lượng, thì địa chỉ ô của dự án ở phía dưới có thể bị thay đổi (Như từ C10 thành C11)
Vậy giả sử với cụm từ "Ctr Khu du lịch nghĩ dưỡng Mỹ Mỹ Resort (Novabeach Cam Ranh) - 106 căn biệt thự - gói 1" đang ở ô C10 trong sheet data. Em thêm 2 dòng ở phía trên C10 đó, thì cụm từ trên sẽ nằm ở C12
Em cần dùng hàm nào hay code vba thế nào để tìm kíem địa chỉ ô của từ đó (để ô J4 bên sheet Nhap Lieu hiện số 12 thay vì sô 10 như hiện tại)
Em cám ơn!
Tôi thấy ở J4 Nhap lieu là tổng dự án chứ có phải là địa chỉ ô đâu mà sửa lại thành 12 thay cho 10?
1635987253368.png
 
Upvote 0
Dạ, xin lỗi anh, file e đưa lên đây e đã xóa bớt data ko cần thiết rồi, nên giờ nó là W5 ở sheetdata ạ. File bài #1
1635992527872.png

Dạ, đây nè anh. cám ơn mọi người đã giúp đỡ!
 
Upvote 0
Dạ, xin lỗi anh, file e đưa lên đây e đã xóa bớt data ko cần thiết rồi, nên giờ nó là W5 ở sheetdata ạ. File bài #1
View attachment 268719

Dạ, đây nè anh. cám ơn mọi người đã giúp đỡ!
Trích #11: "Em cần dùng hàm nào hay code vba thế nào để tìm kíem địa chỉ ô của từ đó (để ô J4 bên sheet Nhap Lieu hiện số 12 thay vì sô 10 như hiện tại)"
Như vậy bạn cần là 1 giá trị địa chỉ ô thay đổi (!?), nhưng qua mấy bài bạn chỉ lung tung cả. Giờ bạn chỉ sang W5 sheet Data nhưng cột W là cột nhận giá trị đã thu chứ địa chỉ ô nào đâu?
 
Upvote 0
Trích #11: "Em cần dùng hàm nào hay code vba thế nào để tìm kíem địa chỉ ô của từ đó (để ô J4 bên sheet Nhap Lieu hiện số 12 thay vì sô 10 như hiện tại)"
Như vậy bạn cần là 1 giá trị địa chỉ ô thay đổi (!?), nhưng qua mấy bài bạn chỉ lung tung cả. Giờ bạn chỉ sang W5 sheet Data nhưng cột W là cột nhận giá trị đã thu chứ địa chỉ ô nào đâu?
Dạ vâng, hiện tại e muốn cố định C5, C36, C51 - các dòng có tên công trình, các dòng này sẽ thay đổi nếu insert thêm dòng phía trên.
Em đã nghĩ ra các chữa cháy là dùng hàm CELL("address";DATA!C5) để cố định nó ở sheet Nhập Liệu 2. Cách này làm hơi thủ công vì giả sử cột I -sheet NhapLieu 2 có 500-1000 ctrinh thì chạy bằng cơm bên sheet Data qúa cực, nên nếu có lệnh nào tìm kiếm cụm từ đó (ở đây là I4 đổ xuống: "Ctr Khu du lịch nghĩ dưỡng Mỹ Mỹ Resort (Novabeach Cam Ranh) - 106 căn biệt thự - gói 1") để ra địa chỉ ô thì hay hơn.
@Bác SA ơi, do không có thời gian nên em làm tạm các marco Nhap Liệu, thấy cũng ổn, vì nhập ko nhiều, chủ yếu chú ý cái Dòng cần nhập để nhập đúng.
Em cũng muốn tạo thêm 1 sheet đề tìm kiếm và tổng hợp chung của sheet DATA nữa, vì nhìn sheet DATA rối mắt quá mà mình ko thay đổi được cấu trúc dữ liệu. Sẽ nhờ mọi người ở bài sau.
@ Em nhờ thêm mọi người: ở sheet File A, có hàm công thức link với file khác, đây là lý do nặng file. Nên em thử marco, để khi nào cần cập nhật thì bấm cho nó khỏi tự động và paste value luôn. Nhưng xài code marco nó còn nặng hơn. Mọi người cho em xin công thức mảng hay cách lấy data ko cần mở file để nó nhẹ nhàng hơn ạ!
Đây là code marco của em:
Mã:
Sub Update_FileA()
'
' Update_FileA Macro
'

'
   
   
    Dim LrA As Long, i As Long
   
    LrA = Sheets("FILE A").Range("C" & Rows.Count).End(xlUp).Row
   
    For i = 99 To LrA
    Range("H" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,10,0)"
    Range("H" & i).Value = .Value
   
    Range("I" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,11,0)"
    Range("I" & i).Value = .Value
       
    Range("J" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,12,0)"
    Range("J" & i).Value = .Value
   
    Range("K" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,13,0)"
    Range("K" & i).Value = .Value
   
    Range("L" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,16,0)"
    Range("L" & i).Value = .Value
   
   
    Range("M" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,17,0)"
    Range("M" & i).Value = .Value
   
    Range("N" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,18,0)"
    Range("N" & i).Value = .Value
   
    Range("O" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,19,0)"
    Range("O" & i).Value = .Value
   
    Range("P" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,22,0)"
    Range("P" & i).Value = .Value
   
   
    Range("T" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,23,0)"
    Range("T" & i).Value = .Value
   
    Range("U" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,28,0)"
    Range("U" & i).Value = .Value
   
    Range("V" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,29,0)"
    Range("V" & i).Value = .Value
   
   
    Range("W" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,37,0)"
    Range("W" & i).Value = .Value
   
    Range("X" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,38,0)"
    Range("X" & i).Value = .Value
   
    Range("Y" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,39,0)"
    Range("Y" & i).Value = .Value
   
    Range("Z" & i).Value = _
        "=IFERROR(VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,41,0),"""")"
    Range("Z" & i).Value = .Value
   
   
    Range("AA" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,47,0)"
    Range("AA" & i).Value = .Value
   
    Range("AB" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,47,0)"
    Range("AB" & i).Value = .Value
   
    Range("AD" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,50,0)"
    Range("AD" & i).Value = .Value
   
    Range("AE" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,59,0)"
    Range("AE" & i).Value = .Value
   
    Range("AF" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,60,0)"
    Range("AF" & i).Value = .Value
   
    Range("AG" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,61,0)"
    Range("AG" & i).Value = .Value
   
    Range("AH" & i).Value = _
        "=VLOOKUP(RC4,'\\RaiDrive-PC\NAS\taichanh\1.QLNPT\13.THU NO\1.A.TAI CHANH\[1. A_TAI CHANH - HUYEN- HDCP.xlsx]HD-CP'!R9C10:R5000C648,62,0)"
    Range("AH" & i).Value = .Value
   Next
 
 
End Sub
 

File đính kèm

  • help_nhap lieu_gpe 10.11.2021.xlsb
    2.5 MB · Đọc: 5
Upvote 0
Web KT
Back
Top Bottom