Vấn đề khó code nhập liệu bằng form (1 người xem)

Liên hệ QC

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

phongkiemtinh

Thành viên thường trực
Tham gia
22/7/09
Bài viết
224
Được thích
5
Vấn đề khó code nhập liệu bằng form và lỗi định dạng ngày trong code lưu

Nhờ các cao thủ GPE xem yêu cầu trong file và giúp e giải quyết với
Code so sánh dữ liệu trùng cuối cùng trong các sheet xuất data sang cel chỉ định và lấy theo thời gian cuối cùng của e bị lỗi khi nhận dịnh dạng ngày giờ. Nếu cột ngày giờ là công thức thì code nhận dạng chạy đúng, nhưng khi cột ngày giờ là do mình nhập vào trực tiếp hoặc từ form thì code chạy báo lỗi. Và vấn đề nữa là nếu cột ngày và cột giờ bằng nhau thì xuất data sang cột chỉ định không xuất vào cell cuối cùng mà lại xuất nằm ở cell phía trên nó.
Vấn đề khó mong các thành viên GPE tham gia giúp.
 
Lần chỉnh sửa cuối:
Nhờ các cao thủ GPE xem yêu cầu trong file và giúp e giải quyết với
Code so sánh dữ liệu trùng cuối cùng trong các sheet xuất data sang cel chỉ định và lấy theo thời gian cuối cùng của e bị lỗi khi nhận dịnh dạng ngày giờ. Nếu cột ngày giờ là công thức thì code nhận dạng chạy đúng, nhưng khi cột ngày giờ là do mình nhập vào trực tiếp hoặc từ form thì code chạy báo lỗi. Và vấn đề nữa là nếu cột ngày và cột giờ bằng nhau thì xuất data sang cột chỉ định không xuất vào cell cuối cùng mà lại xuất nằm ở cell phía trên nó.
Vấn đề khó mong các thành viên GPE tham gia giúp.
Đúng là vần đề khó không có ai giúp được rồi.
 
Upvote 0
Đúng là vần đề khó không có ai giúp được rồi.

Bạn dùng chiêu "khiêu khích, đánh vào lòng hiếu thắng" không tác dụng đâu.

Vấn đề là những ngày nghỉ cuối tuần nhiều người mới có thời gian dành cho những người thân của mình, cho những công chuyện đang "để đấy".

Riêng tôi tôi có cảm giác bạn chưa nghĩ thấu đáo về vấn đề của mình. Tôi e rằng tham gia vào chủ đề của bạn thì sẽ phải viết vài bài để thống nhất về những cái bạn định làm. Tiếp theo có lẽ phải viết lại toàn bộ code ...

Tôi cho ví dụ.

Bạn có (bạn viết không có căn lề rất khó đọc) trong UserForm_Initialize

Mã:
    If CheckBox1 = True Then
        Me.listbox_nhaplieu.RowSource = Sheet4.Name & "!" & Sheet4.[A1:G11].Address
    Else
        If CheckBox2 = True Then
            Me.listbox_nhaplieu.RowSource = Sheet3.Name & "!" & Sheet3.[A1:G11].Address
        Else
            If CheckBox3 = True Then
                Me.listbox_nhaplieu.RowSource = Sheet2.Name & "!" & Sheet2.[A1:G11].Address
            Else
                Me.listbox_nhaplieu = ""
            End If
        End If
    End If

trong khi trong design time bạn không cho checkbox nào được chọn. Vậy kết quả rút gọn là Me.listbox_nhaplieu = "". Nhưng cũng có thể bỏ đi vì ở thời điểm "chào buổi sáng" thì listbox_nhaplieu đang "rỗng" mà.

Bạn viết:

1. Ở cột " Mã Hàng" là kí hiệu tương ứng nhập vào khi nhập liệu chọn tương ứng với từng checkbox được chọn. Ví dụ: chọn nhập liệu stick checkbox "data1" thì Mả hàng nhập là "A" và kí hiệu số là đánh tăng dần theo ngày . qua ngày mới thì bắt đầu từ 1. như vậy khi stick vào checkbox "data1" và nhập liệu vào thì cột "ma hang" trong sheet data1 nhập vào là "A1". Nhập tiếp thì A2.....qua ngày mới trở lại A1. Tương tự sheet data2 là "B1", sheet "data3" là "C1".
2.Ở listbox_thongtin hiển thị thông tin của sheet mà chọn trong check box (được tick), có thể hiển thị theo thanh cuộn. nếu 2 checkbx được tick thì listbox_thongtin được chia làm 2 để hiển thị thông tin 2 sheet. Tương tự chọn 3 checkbox thì chia làm 3 để hiển thị (E mới chỉ làm hiển thị khi chọn 1 check box, còn 2 hay 3 cái trở lên thì chưa làm được)
3. sau khi list box hiển thị khi stick vào check box tương ứng, thì chúng ta bấm chọn vào dòng dữ liệu nào thì load dòng dữ liệu đó lên form,sau khi chỉnh sửa xong bấm nút lệnh "sua du lieu" để sửa. Lưu ý là chỉ cho sửa dữ liệu vừa nhập vào bị sai chưa bị khóa.(vì e làm code sau khi lưu là khóa cell có dữ liệu)
4.xem dùm code auto điền END không hoạt động

Ở cột " Mã Hàng" là kí hiệu tương ứng nhập vào khi nhập liệu chọn tương ứng với từng checkbox được chọn. Ví dụ: chọn nhập liệu stick checkbox "data1" thì Mả hàng nhập là "A".

Tôi hiểu là người dùng chọn vd. checkbox "data1" thì trong textbox_id bắt buộc phải có "A". Vậy thì phải khóa Textbox_id, vì nếu không thì người dùng gõ "B" thì rách việc rồi. Mặt khác nếu checkbox "data1" được chọn thì có nghĩa là mã hàng là "A" thì cần gì tới Textbox_id nữa? Code phát hiện checkbox "data1" được chọn thì code biết mã là "A", thế thôi. Tự dưng thêm Textbox_id để làm gì?

Ngoài ra bạn cho chọn tới 3 checkbox. Vậy tôi hỏi: nếu tôi chọn cả 3 checkbox thì mã sẽ là "A", "B", hay "C"?

Cũng có thể ý bạn là chọn bao nhiêu chexckbox thì sẽ lấy dữ liệu bấy nhiêu vào ListBox. Còn mã thế nào để nhập liệu xuống đúng sheet thì người dùng nhập vào Textbox_id. Nếu thế thì mã đâu có phụ thuộc vào chuyện chọn checkbox nào? Và những chỗ đỏ đỏ là thừa, là làm tối ý thêm.

Nhưng tôi cũng không hiểu được ý lớn là tại sao lại cho chọn 2 hoặc cả 3 checkbox? Vì muốn thao tác với sheet nào thì chọn checkbox tương ứng. Khi đó dữ liệu của sheet được chọn sẽ được "đập" vào ListBox. Cũng khi đó mã sẽ được xác định và Textbox_id không cần thiết. Người dùng có thể nhập dữ liệu rồi nhấn "nhap" để đập chúng xuống sheet. Cũng có thể chọn mục trong ListBox và dữ liệu của mục đó được nhập vào các Textbox. Người dùng sẽ sửa dữ liệu rồi nhấn "sua" để đâp" xuống sheet. Tất nhiên khi chỉ cho chọn 1 trong nhiều thì dùng OptionButton chứ không phải là CheckBox.

Nhưng chuyện sửa này cũng không được làm rõ. Các dữ liệu nào được phép sửa, những dứ liệu nào không được phép sửa? Ít ra tôi thấy cột MaHang không cho người dùng sửa vì A1 hay A4 thì do cột Date quyết định (điểm 1 trích ở trên). Cột Date có được sửa? Tôi lấy vd.

A1 123456 22330395S1 4 22.11.2013
A2 123465 22330395B2 2 22.11.2013
A3 332455 22330395B2 24 22.11.2013
A4 123344 22330395B2 50 22.11.2013

Nếu mục đang sửa là mục thứ 3 và tôi chỉ sửa mỗi ngày tháng thôi vd. thành 15.10.2013 (có được không hay các ngày liên tiếp phải tăng dần? Cái này bạn không nói rõ mà viết xong mới "thông tin nhỏ giọt" thì mất công). Như vậy thì so với dòng 2 thì ngày tháng thay đổi nên code phải tự sửa A3 thànnh A1. Nhưng do ngày ở dòng 4 cũng khác ngày ở dòng 3 sau khi sửa nên code cũng phải tự sửa tiếp A4 thành A1. Nếu có vd. 8 dòng thì rất có thể sẽ phải sửa cả dòng thứ 5, 6, 7, 8 (cột MaHang). Tức người dùng chỉ sửa ngày trong dòng 3 nhưng dữ liệu trong cột MaHang code sẽ phải tự sửa lại hết?

Ngoài ra dữ liệu tại các cột Gcas, Lot, SoLuong có thể nhập tùy ý, vd. nhập Lot là 123hichic có được không? Nếu không được thì mẫu bắt buộc phải như thế nào để code còn lấy làm cơ sở kiểm tra? Chả nhẽ viết code xong bạn mới bổ xung yêu cầu thì viết lại?

Và câu hỏi cuối cùng: lý do gì mà bạn cấm nhập dữ liệu trực tiếp trên sheet?

Vấn đề có thể khó mà cũng có thể dễ. Nhưng hiếm ai bỏ công ra giúp bạn khi có nhiều "dấu hỏi" đến thế.

Tôi bỏ công ra viết bài này cũng là quá phí thời gian. Nhiều khi đọc những bài như của bạn thì người ta "đi tiếp" chứ chả ai mất công như tôi. Tôi nói nhiều khi vì cũng có những người thích viết đi viết lại, thông tin mới thì lại sửa.
 
Upvote 0
Bạn dùng chiêu "khiêu khích, đánh vào lòng hiếu thắng" không tác dụng đâu.

Vấn đề là những ngày nghỉ cuối tuần nhiều người mới có thời gian dành cho những người thân của mình, cho những công chuyện đang "để đấy".

Riêng tôi tôi có cảm giác bạn chưa nghĩ thấu đáo về vấn đề của mình. Tôi e rằng tham gia vào chủ đề của bạn thì sẽ phải viết vài bài để thống nhất về những cái bạn định làm. Tiếp theo có lẽ phải viết lại toàn bộ code ...

Tôi cho ví dụ.

Bạn có (bạn viết không có căn lề rất khó đọc) trong UserForm_Initialize

Mã:
    If CheckBox1 = True Then
        Me.listbox_nhaplieu.RowSource = Sheet4.Name & "!" & Sheet4.[A1:G11].Address
    Else
        If CheckBox2 = True Then
            Me.listbox_nhaplieu.RowSource = Sheet3.Name & "!" & Sheet3.[A1:G11].Address
        Else
            If CheckBox3 = True Then
                Me.listbox_nhaplieu.RowSource = Sheet2.Name & "!" & Sheet2.[A1:G11].Address
            Else
                Me.listbox_nhaplieu = ""
            End If
        End If
    End If

trong khi trong design time bạn không cho checkbox nào được chọn. Vậy kết quả rút gọn là Me.listbox_nhaplieu = "". Nhưng cũng có thể bỏ đi vì ở thời điểm "chào buổi sáng" thì listbox_nhaplieu đang "rỗng" mà.

Bạn viết:



Ở cột " Mã Hàng" là kí hiệu tương ứng nhập vào khi nhập liệu chọn tương ứng với từng checkbox được chọn. Ví dụ: chọn nhập liệu stick checkbox "data1" thì Mả hàng nhập là "A".

Tôi hiểu là người dùng chọn vd. checkbox "data1" thì trong textbox_id bắt buộc phải có "A". Vậy thì phải khóa Textbox_id, vì nếu không thì người dùng gõ "B" thì rách việc rồi. Mặt khác nếu checkbox "data1" được chọn thì có nghĩa là mã hàng là "A" thì cần gì tới Textbox_id nữa? Code phát hiện checkbox "data1" được chọn thì code biết mã là "A", thế thôi. Tự dưng thêm Textbox_id để làm gì?

Ngoài ra bạn cho chọn tới 3 checkbox. Vậy tôi hỏi: nếu tôi chọn cả 3 checkbox thì mã sẽ là "A", "B", hay "C"?

Cũng có thể ý bạn là chọn bao nhiêu chexckbox thì sẽ lấy dữ liệu bấy nhiêu vào ListBox. Còn mã thế nào để nhập liệu xuống đúng sheet thì người dùng nhập vào Textbox_id. Nếu thế thì mã đâu có phụ thuộc vào chuyện chọn checkbox nào? Và những chỗ đỏ đỏ là thừa, là làm tối ý thêm.

Nhưng tôi cũng không hiểu được ý lớn là tại sao lại cho chọn 2 hoặc cả 3 checkbox? Vì muốn thao tác với sheet nào thì chọn checkbox tương ứng. Khi đó dữ liệu của sheet được chọn sẽ được "đập" vào ListBox. Cũng khi đó mã sẽ được xác định và Textbox_id không cần thiết. Người dùng có thể nhập dữ liệu rồi nhấn "nhap" để đập chúng xuống sheet. Cũng có thể chọn mục trong ListBox và dữ liệu của mục đó được nhập vào các Textbox. Người dùng sẽ sửa dữ liệu rồi nhấn "sua" để đâp" xuống sheet. Tất nhiên khi chỉ cho chọn 1 trong nhiều thì dùng OptionButton chứ không phải là CheckBox.

Nhưng chuyện sửa này cũng không được làm rõ. Các dữ liệu nào được phép sửa, những dứ liệu nào không được phép sửa? Ít ra tôi thấy cột MaHang không cho người dùng sửa vì A1 hay A4 thì do cột Date quyết định (điểm 1 trích ở trên). Cột Date có được sửa? Tôi lấy vd.



Nếu mục đang sửa là mục thứ 3 và tôi chỉ sửa mỗi ngày tháng thôi vd. thành 15.10.2013 (có được không hay các ngày liên tiếp phải tăng dần? Cái này bạn không nói rõ mà viết xong mới "thông tin nhỏ giọt" thì mất công). Như vậy thì so với dòng 2 thì ngày tháng thay đổi nên code phải tự sửa A3 thànnh A1. Nhưng do ngày ở dòng 4 cũng khác ngày ở dòng 3 sau khi sửa nên code cũng phải tự sửa tiếp A4 thành A1. Nếu có vd. 8 dòng thì rất có thể sẽ phải sửa cả dòng thứ 5, 6, 7, 8 (cột MaHang). Tức người dùng chỉ sửa ngày trong dòng 3 nhưng dữ liệu trong cột MaHang code sẽ phải tự sửa lại hết?

Ngoài ra dữ liệu tại các cột Gcas, Lot, SoLuong có thể nhập tùy ý, vd. nhập Lot là 123hichic có được không? Nếu không được thì mẫu bắt buộc phải như thế nào để code còn lấy làm cơ sở kiểm tra? Chả nhẽ viết code xong bạn mới bổ xung yêu cầu thì viết lại?

Và câu hỏi cuối cùng: lý do gì mà bạn cấm nhập dữ liệu trực tiếp trên sheet?

Vấn đề có thể khó mà cũng có thể dễ. Nhưng hiếm ai bỏ công ra giúp bạn khi có nhiều "dấu hỏi" đến thế.

Tôi bỏ công ra viết bài này cũng là quá phí thời gian. Nhiều khi đọc những bài như của bạn thì người ta "đi tiếp" chứ chả ai mất công như tôi. Tôi nói nhiều khi vì cũng có những người thích viết đi viết lại, thông tin mới thì lại sửa.
E thức đêm tìm cách làm không ra lên xem không thấy thôi chứ không có ý đó, bác thông cảm.

- Ở đây ngày tháng không tăng dần liện tiếp bạn, ngày tháng có thể lặp lại nhiều lần. Số lượng nhập vào cùng trong ngày là nhiều, đôi khi trùng cả về thời gian. (vì mình set thời gian theo 12 khung giờ cho 1 ngày: 0h,2h,4h,6h,8h,10h,12h,14h,16h,18h,20h,22h)

-Mình dùng checkbox là để cùng lúc có thể nhập dữ liệu vào nhiều sheet cùng lúc (cùng data, chỉ khác MÃ HÀNG) , trên form cell "MA HANG" là không có mình chỉ để vào để giải thích thôi, mình diễn đạt không rõ làm bạn hiểu nhầm.

- Khi nhập liệu bạn chọn stick các checkbox tương ứng để nhập vào sheet tương ứng. Cột mã hàng sẽ tự động điền vào khi có dữ liệu nhập vào trên cột "ma hang" trong sheet thôi. Giống như mình đặt công thức tại cột mã hàng sheet data1 là:cell [A]= if(B1="","","A"&counta($A1:A1)). Nhưng vì mình muốn hỏi có code nào thay thế khi nhập vào mà không phải dùng công thức nào trên sheet.

- Nút chỉnh sữa chỉ cho phép chỉnh sửa những dòng dữ liệu vừa nhập vào chưa được lưu lại (có thể nhập sai cẩn chỉnh sửa ngay) vì khi lưu dữ liệu nhập vào được khóa sheet sẽ khóa, người nhập chọn chỉnh sửa thì yêu cầu pass.

- Mình không muốn cho nhập trực tiếp sheet vì nhiều người nhập định dạng sẽ khác nhau, muốn dùng 1 cách nhập bạn ạ.Trong file mình có code dùng dò tìm tự động so sánh 2 cột [GCAS]+[LOT] về dữ liệu trùng cuối cùng theo ngày giờ và xuất data chữ END .. ra cell chỉ định. Code hay bị lỗi khi định dạng ngày giờ nhập lỗi hoặc để trống (dùng form bẫy lỗi để trống khi nhập liệu).

RẤT CẢM ƠN BẠN ĐÃ NHIỆT TÌNH GIÚP ĐỠ. (KHÔNG BIẾT MÌNH ĐÃ GIẢI THÍCH BẠN HIỂU HẾT KHÔNG).
 
Upvote 0
"trong khi trong design time bạn không cho checkbox nào được chọn. Vậy kết quả rút gọn là Me.listbox_nhaplieu = "". Nhưng cũng có thể bỏ đi vì ở thời điểm "chào buổi sáng" thì listbox_nhaplieu đang "rỗng" mà."

Listbox_nhaplieu chỉ hiển thị thông tin khi mình chọn checkbox nào thì hiển thị thông tin sheet tương ứng, nếu chọn 2 or 3 checkbox thì listbõ nếu làm được thì giống như chia màn hình ra hiển thị thông tin 5 dòng cuối cùng của sheet tương ứng. Mình nghĩ có thể làm thuộc tính ẩn nhiều listbox tương ứng mỗi sheet, khi checkbox nào được stick vào thì hiện listbox đó lên.Không biết ý bạn sao.
 
Upvote 0
E thức đêm tìm cách làm không ra lên xem không thấy thôi chứ không có ý đó, bác thông cảm.

- Ở đây ngày tháng không tăng dần liện tiếp bạn, ngày tháng có thể lặp lại nhiều lần. Số lượng nhập vào cùng trong ngày là nhiều, đôi khi trùng cả về thời gian. (vì mình set thời gian theo 12 khung giờ cho 1 ngày: 0h,2h,4h,6h,8h,10h,12h,14h,16h,18h,20h,22h)

-Mình dùng checkbox là để cùng lúc có thể nhập dữ liệu vào nhiều sheet cùng lúc (cùng data, chỉ khác MÃ HÀNG) , trên form cell "MA HANG" là không có mình chỉ để vào để giải thích thôi, mình diễn đạt không rõ làm bạn hiểu nhầm.

- Khi nhập liệu bạn chọn stick các checkbox tương ứng để nhập vào sheet tương ứng. Cột mã hàng sẽ tự động điền vào khi có dữ liệu nhập vào trên cột "ma hang" trong sheet thôi. Giống như mình đặt công thức tại cột mã hàng sheet data1 là:cell [A]= if(B1="","","A"&counta($A1:A1)). Nhưng vì mình muốn hỏi có code nào thay thế khi nhập vào mà không phải dùng công thức nào trên sheet.

- Nút chỉnh sữa chỉ cho phép chỉnh sửa những dòng dữ liệu vừa nhập vào chưa được lưu lại (có thể nhập sai cẩn chỉnh sửa ngay) vì khi lưu dữ liệu nhập vào được khóa sheet sẽ khóa, người nhập chọn chỉnh sửa thì yêu cầu pass.

- Mình không muốn cho nhập trực tiếp sheet vì nhiều người nhập định dạng sẽ khác nhau, muốn dùng 1 cách nhập bạn ạ.Trong file mình có code dùng dò tìm tự động so sánh 2 cột [GCAS]+[LOT] về dữ liệu trùng cuối cùng theo ngày giờ và xuất data chữ END .. ra cell chỉ định. Code hay bị lỗi khi định dạng ngày giờ nhập lỗi hoặc để trống (dùng form bẫy lỗi để trống khi nhập liệu).

RẤT CẢM ƠN BẠN ĐÃ NHIỆT TÌNH GIÚP ĐỠ. (KHÔNG BIẾT MÌNH ĐÃ GIẢI THÍCH BẠN HIỂU HẾT KHÔNG).

Thế sao bạn không viết cái dòng xanh xanh mà lại viết điểm 1? Nếu không có bài của tôi thì ai hiểu được bạn? Có nghĩa là khi nhấn "nhap" thì dữ liệu sẽ được nhập vào những sheet được chọn trong checkbox chứ sao lại điểm 1 làm gì?

Công thức [A]= if(B1="","","A"&counta($A1:A1)) là không đúng vì còn tùy cột Date cơ mà? Tức nếu ngày khác ở ngay trên thì phải là A1 chứ đâu là A"&counta($A1:A1)? Mà cái gọi là công thức bây giờ bạn mới đưa ra chứ không có bài của tôi thì ai mà biết được?

Chỗ đỏ đỏ bây giờ bạn mới hỏi chứ trước đó ai biết được. Mà muốn code làm thay công thức thì ... Bạn có trả lời câu hỏi của tôi đâu.

Ngày tháng tôi hiểu là "ngày tháng có thể lặp lại nhiều lần". Lẽ ra theo vd. thì bạn phải hiểu tôi. Nhưng đúng là tôi không chính xác. Vậy tôi sửa lại: ngày tháng có được tùy ý không hay phải "không giảm"? Tức ngày tiếp phải như ngày ngay trên hoặc sau (mới hơn)? Có cho phép 4 ngày liên tiếp là 22.11.2013, 22.11.2013, 15.10.2013, 22.11.2013 (trước khi sửa là 4 ngày như nhau: 22.11.2013, 22.11.2013, 22.11.2013, 22.11.2013)? Hay sau khi sửa thì phải sắp xếp lại thành: 15.10.2013, 22.11.2013, 22.11.2013, 22.11.2013?

Bạn có thể cho phép nhập xuống đồng thời 1, 2, 3 sheet tùy theo bao nhiêu checkbox được chọn nhưng bạn không thể cho sửa cả 3 sheet khi 3 checkbox đều được chọn. Vì sửa thì đập xuống sheet phải đúng vị trí. VD. bạn chọn trong ListBox mục thứ 3 của sheet "data2" thì dù có 3 checkbox được chọn nhưng khi nhấn "sua" thì dữ liệu chỉ được đập xuống sheet "data2" vào vị trí dòng thứ 3 thôi chứ muốn đập xuống "data1", "data3" thì đập xuống đâu, xuống dòng thứ mấy đây?

Trong 4 cột dữ liệu thì bạn cho phép sửa cả 4 hay không cho sửa cột Date? Vì sửa cột Date thì code sẽ phải sửa cả cột Mã.

Tôi biết ngay là ít nhất phải vài bài mới hiểu được bạn muốn làm những gì. Mất thời gian như thế thì chả ai muốn mất đâu.
 
Upvote 0
"trong khi trong design time bạn không cho checkbox nào được chọn. Vậy kết quả rút gọn là Me.listbox_nhaplieu = "". Nhưng cũng có thể bỏ đi vì ở thời điểm "chào buổi sáng" thì listbox_nhaplieu đang "rỗng" mà."

Listbox_nhaplieu chỉ hiển thị thông tin khi mình chọn checkbox nào thì hiển thị thông tin sheet tương ứng, nếu chọn 2 or 3 checkbox thì listbõ nếu làm được thì giống như chia màn hình ra hiển thị thông tin 5 dòng cuối cùng của sheet tương ứng. Mình nghĩ có thể làm thuộc tính ẩn nhiều listbox tương ứng mỗi sheet, khi checkbox nào được stick vào thì hiện listbox đó lên.Không biết ý bạn sao.

Ý tôi là với hiện trạng như hiện giờ thì toàn bộ code tôi trích là thừa. Vì có thì cũng như không có do trong design time bạn không chọn Checkbox nào cả.
Tôi nghĩ thế này: chuyện nhập xuống bao nhiêu sheet thì tùy bao nhiêu checkbox được chọn. Còn sửa thì luôn chỉ sửa 1 sheet trong một thời điểm. Vậy thì ListBox chỉ cần hiển thị nội dung của 1 sheet đang cần sửa. Lúc đó cần sửa mục nào thì chọn trong ListBox. Code sẽ nhập dữ liệu của mục được chọn vào các textbox. Khi nhấn nút "sua" thì dữ liệu được đập xuống sheet đang ở ListBox, vào đúng vị trí mục được chọn.
 
Upvote 0
Ý tôi là với hiện trạng như hiện giờ thì toàn bộ code tôi trích là thừa. Vì có thì cũng như không có do trong design time bạn không chọn Checkbox nào cả.
Tôi nghĩ thế này: chuyện nhập xuống bao nhiêu sheet thì tùy bao nhiêu checkbox được chọn. Còn sửa thì luôn chỉ sửa 1 sheet trong một thời điểm. Vậy thì ListBox chỉ cần hiển thị nội dung của 1 sheet đang cần sửa. Lúc đó cần sửa mục nào thì chọn trong ListBox. Code sẽ nhập dữ liệu của mục được chọn vào các textbox. Khi nhấn nút "sua" thì dữ liệu được đập xuống sheet đang ở ListBox, vào đúng vị trí mục được chọn.
Ah cái này đúng ý rồi.hi
 
Upvote 0
Thế sao bạn không viết cái dòng xanh xanh mà lại viết điểm 1? Nếu không có bài của tôi thì ai hiểu được bạn? Có nghĩa là khi nhấn "nhap" thì dữ liệu sẽ được nhập vào những sheet được chọn trong checkbox chứ sao lại điểm 1 làm gì?

Công thức [A]= if(B1="","","A"&counta($A1:A1)) là không đúng vì còn tùy cột Date cơ mà? Tức nếu ngày khác ở ngay trên thì phải là A1 chứ đâu là A"&counta($A1:A1)? Mà cái gọi là công thức bây giờ bạn mới đưa ra chứ không có bài của tôi thì ai mà biết được?

Chỗ đỏ đỏ bây giờ bạn mới hỏi chứ trước đó ai biết được. Mà muốn code làm thay công thức thì ... Bạn có trả lời câu hỏi của tôi đâu.

Ngày tháng tôi hiểu là "ngày tháng có thể lặp lại nhiều lần". Lẽ ra theo vd. thì bạn phải hiểu tôi. Nhưng đúng là tôi không chính xác. Vậy tôi sửa lại: ngày tháng có được tùy ý không hay phải "không giảm"? Tức ngày tiếp phải như ngày ngay trên hoặc sau (mới hơn)? Có cho phép 4 ngày liên tiếp là 22.11.2013, 22.11.2013, 15.10.2013, 22.11.2013 (trước khi sửa là 4 ngày như nhau: 22.11.2013, 22.11.2013, 22.11.2013, 22.11.2013)? Hay sau khi sửa thì phải sắp xếp lại thành: 15.10.2013, 22.11.2013, 22.11.2013, 22.11.2013?

Bạn có thể cho phép nhập xuống đồng thời 1, 2, 3 sheet tùy theo bao nhiêu checkbox được chọn nhưng bạn không thể cho sửa cả 3 sheet khi 3 checkbox đều được chọn. Vì sửa thì đập xuống sheet phải đúng vị trí. VD. bạn chọn trong ListBox mục thứ 3 của sheet "data2" thì dù có 3 checkbox được chọn nhưng khi nhấn "sua" thì dữ liệu chỉ được đập xuống sheet "data2" vào vị trí dòng thứ 3 thôi chứ muốn đập xuống "data1", "data3" thì đập xuống đâu, xuống dòng thứ mấy đây?

Trong 4 cột dữ liệu thì bạn cho phép sửa cả 4 hay không cho sửa cột Date? Vì sửa cột Date thì code sẽ phải sửa cả cột Mã.

Tôi biết ngay là ít nhất phải vài bài mới hiểu được bạn muốn làm những gì. Mất thời gian như thế thì chả ai muốn mất đâu.
- ngày ở đây không giảm, vì khi nhập là ngày auto theo hệ thống khi nhập liệu.(không phải sửa ngày).
- mỗi lần sửa chỉ cần sửa cho 1 sheet, nhưng khi sửa thì cho phép sửa mã hàng.
 
Upvote 0
- ngày ở đây không giảm, vì khi nhập là ngày auto theo hệ thống khi nhập liệu.(không phải sửa ngày).
- mỗi lần sửa chỉ cần sửa cho 1 sheet, nhưng khi sửa thì cho phép sửa mã hàng.

Auto? Bạn cho người ta mỗi Textbox, tức người ta phải gõ. Auto chỗ nào?
Ngoài ra chỗ xanh xanh là nghĩa thế nào? Khi nhập liệu thì cũng là lúc xác định luôn MaHang dạng Axyz. Vậy ở thời điểm Sửa thì các mã đã đúng. Nếu không cho sửa Date mà Mã chỉ phụ thuộc vào Date thì cũng có nghĩa là các Mã vẫn thế. Vậy "thì cho phép sửa mã hàng" có nghĩa thế nào? Tôi chịu không hiểu cái lôgíc của bạn.

Và bạn hãy nói rõ: bạn nhờ người ta viết code? Viết code cho cái gì hay viết lại - thêm toàn bộ code? Bạn có khó khăn trong khâu nào?

Đúng như tôi dự đoán: phải mất vài bài mới có thể moi hết thông tin cụ thể từ bạn. Chán.
 
Upvote 0
Auto? Bạn cho người ta mỗi Textbox, tức người ta phải gõ. Auto chỗ nào?
Ngoài ra chỗ xanh xanh là nghĩa thế nào? Khi nhập liệu thì cũng là lúc xác định luôn MaHang dạng Axyz. Vậy ở thời điểm Sửa thì các mã đã đúng. Nếu không cho sửa Date mà Mã chỉ phụ thuộc vào Date thì cũng có nghĩa là các Mã vẫn thế. Vậy "thì cho phép sửa mã hàng" có nghĩa thế nào? Tôi chịu không hiểu cái lôgíc của bạn.

Và bạn hãy nói rõ: bạn nhờ người ta viết code? Viết code cho cái gì hay viết lại - thêm toàn bộ code? Bạn có khó khăn trong khâu nào?

Đúng như tôi dự đoán: phải mất vài bài mới có thể moi hết thông tin cụ thể từ bạn. Chán.
-Cái textbox mình khóa lại là được mà, chỉ để hiển thị xem kiểm tra đúng không thôi.
- còn cái mã hàng thì bạn giúp mình viết code auto như yêu cầu thôi, không cần chỉnh sửa cũng được.
- giúp mình code load thông tin vào listbox_nhap liệu khi stick check box và chình sữa dong thông tin vừa nhập vào có trên form
 
Lần chỉnh sửa cuối:
Upvote 0
-Cái textbox mình khóa lại là được mà, chỉ để hiển thị xem kiểm tra đúng không thôi.

Nếu thế thì bạn thiết kế lại Form cho thật chuẩn rồi hãy hỏi nhé. Bạn đùn nhiều việc cho mọi người và thậm chí bạn không tiết lộ ra. Tôi phải moi từng thông tin như thế này sao?
 
Upvote 0
Nếu thế thì bạn thiết kế lại Form cho thật chuẩn rồi hãy hỏi nhé. Bạn đùn nhiều việc cho mọi người và thậm chí bạn không tiết lộ ra. Tôi phải moi từng thông tin như thế này sao?
Mình upload file mới nhất bạn xem có giúp được gì không, xem chi tiết trong các sheet nha.
 
Upvote 0
Mình upload file mới nhất bạn xem có giúp được gì không, xem chi tiết trong các sheet nha.

Hoặc là bạn chỉ ra cách xác định ngày tháng, tức người nhập liệu không nhập mà code sẽ theo "cách cho trước" để tự nhập, thì tôi làm cã cột MaHang, hoặc bạn không chỉ ra "cách cho trước" thì tôi sẽ không làm cột MaHang và bạn tự làm. Lựa chọn thuộc về bạn.

Tôi hỏi thêm. Có phải là trong những sheet này người ta sẽ nhập dữ liệu trong nhiều khoảng thời gian khác nhau? Vd. hôm nay nhập vài dòng dữ liệu, ngày mai hoặc ngày kia hoặc một ngày nào đó trong tương lai sẽ lại nhập vài dòng, cứ như thế. Và khi nhập dữ liệu thì ngày tháng ở cột Date là ngày mà dữ liệu đang được nhập? Nếu thế thì khẳng định để code tự đọc từ system. Khi đó tôi sẽ vứt vào sọt rác Textbox_ngay và ComboBox_TIME, hoặc không sử dụng tới chúng.

Một câu hỏi thêm. Sẽ luôn luôn là 3 sheet hay trong tương lai có thể là 5, 9, 20 sheet (data1, ..., data20)?
 
Upvote 0
Hoặc là bạn chỉ ra cách xác định ngày tháng, tức người nhập liệu không nhập mà code sẽ theo "cách cho trước" để tự nhập, thì tôi làm cã cột MaHang, hoặc bạn không chỉ ra "cách cho trước" thì tôi sẽ không làm cột MaHang và bạn tự làm. Lựa chọn thuộc về bạn.

Tôi hỏi thêm. Có phải là trong những sheet này người ta sẽ nhập dữ liệu trong nhiều khoảng thời gian khác nhau? Vd. hôm nay nhập vài dòng dữ liệu, ngày mai hoặc ngày kia hoặc một ngày nào đó trong tương lai sẽ lại nhập vài dòng, cứ như thế. Và khi nhập dữ liệu thì ngày tháng ở cột Date là ngày mà dữ liệu đang được nhập? Nếu thế thì khẳng định để code tự đọc từ system. Khi đó tôi sẽ vứt vào sọt rác Textbox_ngay và ComboBox_TIME, hoặc không sử dụng tới chúng.

Một câu hỏi thêm. Sẽ luôn luôn là 3 sheet hay trong tương lai có thể là 5, 9, 20 sheet (data1, ..., data20)?

- Đúng là dòng màu xanh bạn, ngày lấy theo hệ thống tại thời điểm nhập dữ liệu vào, không phải tự nhập ngày. mình có dòng này trong code lấy ngày vào khi nhập dữ liệu luôn đó bạn :
Me.TextBox_ngay = Format(Date, "dd.mm.yyyy")

- dòng màu đỏ bạn hỏi thì cũng là ý mình, dữ liệu mình nhập vào cùng lúc có thể tùy ý không chi giới hạn 3 sheet.
 
Upvote 0
- Đúng là dòng màu xanh bạn, ngày lấy theo hệ thống tại thời điểm nhập dữ liệu vào, không phải tự nhập ngày. mình có dòng này trong code lấy ngày vào khi nhập dữ liệu luôn đó bạn :
Me.TextBox_ngay = Format(Date, "dd.mm.yyyy")

- dòng màu đỏ bạn hỏi thì cũng là ý mình, dữ liệu mình nhập vào cùng lúc có thể tùy ý không chi giới hạn 3 sheet.

Bạn chịu khó chờ vì tôi cũng có việc của mình.
 
Upvote 0
1. Khi show Form: CheckBox4 được đánh dấu, tên các sheet được nhập vào ComboBox1.
2. Khi CheckBox4 được đánh dấu thì chỉ nhập liệu được (nút Active) không sửa được.
3. Sheet cần sửa chọn trong ComboBox1. Luôn có thể chọn sheet trong mỗi thời điểm nhưng chỉ khi bỏ chọn CheckBox4, tức vào chế độ sửa, thì nhiều nhất 10 dòng của sheet được chọn mới hiện trong listbox_nhaplieu. Nút "Sua" chỉ active khi chọn mục nào đó trong ListBox. Sau khi nhấn "Sua" thì có thể chọn mục khác để sửa. Khi cần nhập dữ liệu thì lại đánh dấu CheckBox4.
4. Các mã A, B, C được nhớ trong CheckBox1.Tag, CheckBox2.Tag, CheckBox3.Tag trong design time. Trong tương lai nếu đổi mã thì sửa "ở đó", và nếu thêm sheet thì nhập mã "ở đó".

Endsample chạy đã không có lỗi nhưng tôi không sửa gì, thậm chí tôi không dò để xem bạn định làm những gì. Nếu bạn cần giúp về code Endsample thì lập chủ đề mới để hỏi. Tôi đã mất rất nhiều thời gian để biết được cụ thể bạn định làm những gì. Bây giờ tôi không muốn mất thêm thời gian để "thống nhất", "sáng tỏ" ý định của bạn nữa. Nếu code có lỗi trong phần đã làm thì tôi sẽ sửa. Nhưng làm "cái mới" thì không.
 

File đính kèm

Upvote 0
1. Khi show Form: CheckBox4 được đánh dấu, tên các sheet được nhập vào ComboBox1.
2. Khi CheckBox4 được đánh dấu thì chỉ nhập liệu được (nút Active) không sửa được.
3. Sheet cần sửa chọn trong ComboBox1. Luôn có thể chọn sheet trong mỗi thời điểm nhưng chỉ khi bỏ chọn CheckBox4, tức vào chế độ sửa, thì nhiều nhất 10 dòng của sheet được chọn mới hiện trong listbox_nhaplieu. Nút "Sua" chỉ active khi chọn mục nào đó trong ListBox. Sau khi nhấn "Sua" thì có thể chọn mục khác để sửa. Khi cần nhập dữ liệu thì lại đánh dấu CheckBox4.
4. Các mã A, B, C được nhớ trong CheckBox1.Tag, CheckBox2.Tag, CheckBox3.Tag trong design time. Trong tương lai nếu đổi mã thì sửa "ở đó", và nếu thêm sheet thì nhập mã "ở đó".

Endsample chạy đã không có lỗi nhưng tôi không sửa gì, thậm chí tôi không dò để xem bạn định làm những gì. Nếu bạn cần giúp về code Endsample thì lập chủ đề mới để hỏi. Tôi đã mất rất nhiều thời gian để biết được cụ thể bạn định làm những gì. Bây giờ tôi không muốn mất thêm thời gian để "thống nhất", "sáng tỏ" ý định của bạn nữa. Nếu code có lỗi trong phần đã làm thì tôi sẽ sửa. Nhưng làm "cái mới" thì không.
Cảm ơn bạn nhiều thật hiếm khi có ai nhiệt tình giúp đỡ, có lỗi gì trong code bạn sửa mình sẽ nhờ thêm,mình hiểu code Endsample bị lỗi gì khi nhìn vào code của bạn rồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn nhiều thật hiếm khi có ai nhiệt tình giúp đỡ, có lỗi gì trong code bạn sửa mình sẽ nhờ thêm,mình hiểu code Endsample bị lỗi gì khi nhìn vào code của bạn rồi.

Định dạng ngày tháng? Vì tôi thấy bạn định dạng "không giống ai"
 
Upvote 0
Định dạng ngày tháng? Vì tôi thấy bạn định dạng "không giống ai"
Ah bạn giải thích chỉ dùm mình đoạn code auto đánh mã hàng phần số tăng theo ngày được không.
Mà bạn ơi phần dữ liệu đã nhập lần save trước, nêú vộ tình chọn và nhấp chỉnh sửa thì code báo lỗi (do đã protect).
bạn thêm code dùm nếu data đã khóa thì hỏi pass, có pass cho sửa, không có pass thì hủy bỏ lệnh sửa xóa data trên form.
 
Lần chỉnh sửa cuối:
Upvote 0
1. Khi show Form: CheckBox4 được đánh dấu, tên các sheet được nhập vào ComboBox1.
2. Khi CheckBox4 được đánh dấu thì chỉ nhập liệu được (nút Active) không sửa được.
3. Sheet cần sửa chọn trong ComboBox1. Luôn có thể chọn sheet trong mỗi thời điểm nhưng chỉ khi bỏ chọn CheckBox4, tức vào chế độ sửa, thì nhiều nhất 10 dòng của sheet được chọn mới hiện trong listbox_nhaplieu. Nút "Sua" chỉ active khi chọn mục nào đó trong ListBox. Sau khi nhấn "Sua" thì có thể chọn mục khác để sửa. Khi cần nhập dữ liệu thì lại đánh dấu CheckBox4.
4. Các mã A, B, C được nhớ trong CheckBox1.Tag, CheckBox2.Tag, CheckBox3.Tag trong design time. Trong tương lai nếu đổi mã thì sửa "ở đó", và nếu thêm sheet thì nhập mã "ở đó".

Endsample chạy đã không có lỗi nhưng tôi không sửa gì, thậm chí tôi không dò để xem bạn định làm những gì. Nếu bạn cần giúp về code Endsample thì lập chủ đề mới để hỏi. Tôi đã mất rất nhiều thời gian để biết được cụ thể bạn định làm những gì. Bây giờ tôi không muốn mất thêm thời gian để "thống nhất", "sáng tỏ" ý định của bạn nữa. Nếu code có lỗi trong phần đã làm thì tôi sẽ sửa. Nhưng làm "cái mới" thì không.

Mình làm form xong rồi, nhưng vẫn chưa sửa được điền ID vào cột [E] , với cột ngày là cột , mình sửa code bạn thành thế này không biết đúng không??trong tag minh cũng đã điền rồi mà chạy code không nhập gì vào cột [E] cả.
..........
For Each chk In LINE_INPUT.Controls
If chk.Value Then
SheetSel = True
Set currSheet = Sheets(chk.Caption)
Set lastCell = currSheet.[A65536].End(xlUp).Offset(1)
ngay1 = Format(Now, "Short Date")
currCode = chk.Tag
With lastCell
index = 0
If .Row > 2 Then
If .Offset(-1, 4) = ngay1 Then
index = Replace(.Offset(1).Value, currCode, "") '??danh so tu dong theo ngay,ket hop Tag =ki hieu line
End If
End If
.Value = currCode & index + 1
.Offset(0, 0).Value = a
.Offset(0, 1).Value = ngay1
.Offset(0, 2).Value = b
.Offset(0, 3).Value = c
.Offset(0, 5).Value = d
.Offset(0, 6).Value = Left(e, 4) & "0395" & Right(e, 2)
.Offset(0, 7).Value = f
.Offset(0, 8).Value = Format(g, "00h00")
.Offset(0, 9).Value = Format(h, "00h00")
.Offset(0, 10).Value = Format(l, "00h00")
.Offset(0, 17).Value = m
.Offset(0, 19).Value = Now

End With
End If
Next
...............
 
Upvote 0
Ah bạn giải thích chỉ dùm mình đoạn code auto đánh mã hàng phần số tăng theo ngày được không.
Mà bạn ơi phần dữ liệu đã nhập lần save trước, nêú vộ tình chọn và nhấp chỉnh sửa thì code báo lỗi (do đã protect).
bạn thêm code dùm nếu data đã khóa thì hỏi pass, có pass cho sửa, không có pass thì hủy bỏ lệnh sửa xóa data trên form.

Sao một câu như thế mà bạn không nói ngay từ đầu? Bạn cứ nói protect mà chả nói rõ thế nào và trong các tâp tin cũ không có cột - ô PASS nên tôi không rõ. File mới tôi cũng chả để ý. Một câu đỏ đỏ khó thế sao mà không viết thật rõ trong bài đầu?
Tôi sẽ viết lại.
 
Upvote 0
Sao một câu như thế mà bạn không nói ngay từ đầu? Bạn cứ nói protect mà chả nói rõ thế nào và trong các tâp tin cũ không có cột - ô PASS nên tôi không rõ. File mới tôi cũng chả để ý. Một câu đỏ đỏ khó thế sao mà không viết thật rõ trong bài đầu?
Tôi sẽ viết lại.
Xin lỗi vì bạn chưa biết, Bạn giúp mình chút, nếu chưa rõ mình gửi file gốc có pass protect lên bạn kiểm tra.Còn 2 vấn đề đang hỏi bạn nữa là tạm ổn bạn.
 
Upvote 0
Mà bạn ơi phần dữ liệu đã nhập lần save trước, nêú vộ tình chọn và nhấp chỉnh sửa thì code báo lỗi (do đã protect).
bạn thêm code dùm nếu data đã khóa thì hỏi pass, có pass cho sửa, không có pass thì hủy bỏ lệnh sửa xóa data trên form.

Tôi không hỏi thêm gì nữa vì bấy nhiêu bài viết để moi thông tin từ bạn đã quá đủ. Tôi tự quyết định

thêm hằng số mat_khau. Trước khi đưa tập tin cho người nhập dữ liệu thì bạn thay "hichic" bằng mật

khẩu của mình. Nếu bạn nhớ mật khẩu bằng cách khác thì bạn tự làm.

Thêm vào module1

Mã:
Public Const mat_khau = "hichic"
    
Function CheckPassword(ByVal pass As String) As Boolean
    CheckPassword = InputBox("Hay nhap mat khau", "Mat khau") = pass
End Function

Hai sub thay đổi

Mã:
Private Sub ComboBox1_Change()
Dim lastCell As Range, Arr, r As Long, c As Long
On Error Resume Next
    listbox_nhaplieu.Clear
    If Not CheckBox4.Value Then
        If ComboBox1.Text <> "" Then
            Set EditSheet = Sheets(ComboBox1.Text)
            If Not EditSheet Is Nothing Then
                Set lastCell = EditSheet.[A65536].End(xlUp)
                If lastCell.Row > 1 Then
                    If lastCell.Row >= 11 Then
                        Arr = lastCell.Offset(-9).Resize(10, [COLOR=#ff0000]8[/COLOR]).Value
                    Else
                        Arr = EditSheet.Range("A2").Resize(lastCell.Row - 1, [COLOR=#ff0000]8[/COLOR]).Value
                    End If
                    listbox_nhaplieu.List = Arr
                End If
            End If
        End If
    End If
End Sub

Private Sub listbox_nhaplieu_Click()
[COLOR=#0000ff]Dim allow As Boolean
    [/COLOR]If listbox_nhaplieu.ListIndex > -1 Then[COLOR=#0000ff]
        allow = listbox_nhaplieu.List(listbox_nhaplieu.ListIndex, 7) <> "PASS"
        If Not allow Then allow = CheckPassword(mat_khau)
        If allow Then[/COLOR]
            EditRow = listbox_nhaplieu.ListIndex + 2
            Textbox_gcas.Text = listbox_nhaplieu.List(EditRow - 2, 1)
            Textbox_lot.Text = listbox_nhaplieu.List(EditRow - 2, 2)
            Textbox_soluong.Text = listbox_nhaplieu.List(EditRow - 2, 3)
            Suadulieu.Enabled = True
        [COLOR=#0000ff]End If[/COLOR]
    End If
End Sub

Chỗ đỏ đỏ là sửa, chỗ xanh xanh là thêm vào.

Ah bạn giải thích chỉ dùm mình đoạn code auto đánh mã hàng phần số tăng theo ngày được không

Triết lý chả có gì phức tạp

Mã:
                currCode = chk.Tag
                With lastCell
                    index = 0
                    If .Row > 2 Then
                        If .Offset(-1, 4) = ngay Then
                            index = Replace(.Offset(-1).Value, currCode, "")
                        End If
                    End If
                    .Value = currCode & index + 1

Ta xét currCode = "A". Với currCode = "B", "C" tương tự.

1. Nếu thỏa "lastCell.Row > 2" tức ít nhất là đã có dòng dữ liệu thứ 2, tức trước dòng sẽ thêm vào đã

có dòng dữ liệu nào đó. Vậy phải kiểm tra ngày của dòng đó có khác ngày hiện hành hay không, tức

kiểm tra xem liệu có "lastCell.Offset(-1, 4) = ngay".
1a. Nếu thỏa thì 2 dòng là cùng ngày nên
Mã:
index = Replace(.Offset(-1).Value, currCode, "") = Replace("Axyz", currCode, "") = xyz
=>
Mã:
lastCell.Value = currCode & index + 1 = "A" & xyz + 1 = "Axyz+1"

tức dòng thêm vào có MaHang với chỉ số tăng thêm 1.

1b. Nếu đk "lastCell.Offset(-1, 4) = ngay" không thỏa thì là ngày mới. Tất nhiên vẫn có index = 0 nên

sau đó

Mã:
lastCell.Value = currCode & index + 1 = "A" & 0 + 1 = "A1"

tức MaHang tại dòng thêm vào lại là "A1"

2. Còn nếu không thỏa "lastCell.Row > 2" thì có nghĩa là dòng sắp thêm là dòng thứ 2, tức là dòng dữ

liệu nhập đầu tiên. Dĩ nhiên lúc đó ta cũng có index = 0 và do vậy

Mã:
lastCell.Value = currCode & index + 1 = "A" & 0 + 1 = "A1"

[A2] = "A1"
 
Upvote 0
Mình làm form xong rồi, nhưng vẫn chưa sửa được điền ID vào cột [E] , với cột ngày là cột , mình sửa code bạn thành thế này không biết đúng không??trong tag minh cũng đã điền rồi mà chạy code không nhập gì vào cột [E] cả.
..........
For Each chk In LINE_INPUT.Controls
If chk.Value Then
SheetSel = True
Set currSheet = Sheets(chk.Caption)
Set lastCell = currSheet.[A65536].End(xlUp).Offset(1)
ngay1 = Format(Now, "Short Date")
currCode = chk.Tag
With lastCell
index = 0
If .Row > 2 Then
If .Offset(-1, 4) = ngay1 Then
index = Replace(.Offset(1).Value, currCode, "") '??danh so tu dong theo ngay,ket hop Tag =ki hieu line
End If
End If
.Value = currCode & index + 1
.Offset(0, 0).Value = a
.Offset(0, 1).Value = ngay1
.Offset(0, 2).Value = b
.Offset(0, 3).Value = c
.Offset(0, 5).Value = d
.Offset(0, 6).Value = Left(e, 4) & "0395" & Right(e, 2)
.Offset(0, 7).Value = f
.Offset(0, 8).Value = Format(g, "00h00")
.Offset(0, 9).Value = Format(h, "00h00")
.Offset(0, 10).Value = Format(l, "00h00")
.Offset(0, 17).Value = m
.Offset(0, 19).Value = Now

End With
End If
Next
...............


Ở bài #12 tôi đã viết:

Nếu thế thì bạn thiết kế lại Form cho thật chuẩn rồi hãy hỏi nhé

Ở bài #13 bạn viết:
Mình upload file mới nhất bạn xem có giúp được gì không, xem chi tiết trong các sheet nha

Những tưởng việc thiết kế sheet, form đã chuẩn và tôi đã trả lời. Bây giờ thì bạn lại viết:

Mình làm form xong rồi

Như thế là cái tập tin mà "Mình upload file mới nhất" vẫn chưa chuẩn? Vẫn là form chưa làm xong, đang làm dở?

Tôi đã viết nhiều bài để "van nài" thông tin và bạn cũng có nhiều cơ hội giải thích, liệt kê các yêu cầu. Vậy khi tôi viết code thì chỉ viết 1 lần.
Vấn đề hỏi thêm thì bạn lập chủ đề mới để hỏi. Hoặc có ai đó đọc chủ đề này sẽ giúp bạn. Tôi không tiếc thời gian vì nếu tiếc thì đã không trả lời. Nhưng tôi không thích như thế.
 
Upvote 0
Ở bài #12 tôi đã viết:



Ở bài #13 bạn viết:


Những tưởng việc thiết kế sheet, form đã chuẩn và tôi đã trả lời. Bây giờ thì bạn lại viết:



Như thế là cái tập tin mà "Mình upload file mới nhất" vẫn chưa chuẩn? Vẫn là form chưa làm xong, đang làm dở?

Tôi đã viết nhiều bài để "van nài" thông tin và bạn cũng có nhiều cơ hội giải thích, liệt kê các yêu cầu. Vậy khi tôi viết code thì chỉ viết 1 lần.
Vấn đề hỏi thêm thì bạn lập chủ đề mới để hỏi. Hoặc có ai đó đọc chủ đề này sẽ giúp bạn. Tôi không tiếc thời gian vì nếu tiếc thì đã không trả lời. Nhưng tôi không thích như thế.
Vì file mình làm hơi nặng và nhiều code rối rắm nên mình làm một bản đơn giản với 3 sheet và demo thôi, bây giờ mình chỉnh sửa code vào fie chính nên thắc mắc code của bạn mới hỏi thêm.
mình mới thay đổi thứ tự cột nhập ngày vào và cả cột điền mã hàng nên hỏi lại thay đổi thông số chỗ đó thôi.Không có gì nữa đâu, cảm ơn bạn như vậy là được rồi.
Mà thấy trong code bạn giải là dòng: Lastcell.Value = currCode & index + 1 sao code lai là dòng khác.Value = currCode & index + 1
 
Lần chỉnh sửa cuối:
Upvote 0
Mà thấy trong code bạn giải là dòng: Lastcell.Value = currCode & index + 1 sao code lai là dòng khác.Value = currCode & index + 1

Bạn không thấy ở trên có?
Mã:
With lastCell

Nếu bạn chưa có cái cơ bản của cơ bản VBA thì đọc help hoặc theo học một khóa cơ bản. GPE cũng tổ chức không
 
Upvote 0
Bạn không thấy ở trên có?
Mã:
With lastCell

Nếu bạn chưa có cái cơ bản của cơ bản VBA thì đọc help hoặc theo học một khóa cơ bản. GPE cũng tổ chức không
Mính làm được rồi 1 lần nữa cảm ơn bác, đúng là mình chưa được học nên hơi dốt, chỉ lên mạng đọc rồi tự làm và hỏi nên bạn thông cảm.
 
Upvote 0
Tôi không hỏi thêm gì nữa vì bấy nhiêu bài viết để moi thông tin từ bạn đã quá đủ. Tôi tự quyết định

thêm hằng số mat_khau. Trước khi đưa tập tin cho người nhập dữ liệu thì bạn thay "hichic" bằng mật

khẩu của mình. Nếu bạn nhớ mật khẩu bằng cách khác thì bạn tự làm.

Thêm vào module1

Mã:
Public Const mat_khau = "hichic"
    
Function CheckPassword(ByVal pass As String) As Boolean
    CheckPassword = InputBox("Hay nhap mat khau", "Mat khau") = pass
End Function

Hai sub thay đổi

Mã:
Private Sub ComboBox1_Change()
Dim lastCell As Range, Arr, r As Long, c As Long
On Error Resume Next
    listbox_nhaplieu.Clear
    If Not CheckBox4.Value Then
        If ComboBox1.Text <> "" Then
            Set EditSheet = Sheets(ComboBox1.Text)
            If Not EditSheet Is Nothing Then
                Set lastCell = EditSheet.[A65536].End(xlUp)
                If lastCell.Row > 1 Then
                    If lastCell.Row >= 11 Then
                        Arr = lastCell.Offset(-9).Resize(10, [COLOR=#ff0000]8[/COLOR]).Value
                    Else
                        Arr = EditSheet.Range("A2").Resize(lastCell.Row - 1, [COLOR=#ff0000]8[/COLOR]).Value
                    End If
                    listbox_nhaplieu.List = Arr
                End If
            End If
        End If
    End If
End Sub

Private Sub listbox_nhaplieu_Click()
[COLOR=#0000ff]Dim allow As Boolean
    [/COLOR]If listbox_nhaplieu.ListIndex > -1 Then[COLOR=#0000ff]
        allow = listbox_nhaplieu.List(listbox_nhaplieu.ListIndex, 7) <> "PASS"
        If Not allow Then allow = CheckPassword(mat_khau)
        If allow Then[/COLOR]
            EditRow = listbox_nhaplieu.ListIndex + 2
            Textbox_gcas.Text = listbox_nhaplieu.List(EditRow - 2, 1)
            Textbox_lot.Text = listbox_nhaplieu.List(EditRow - 2, 2)
            Textbox_soluong.Text = listbox_nhaplieu.List(EditRow - 2, 3)
            Suadulieu.Enabled = True
        [COLOR=#0000ff]End If[/COLOR]
    End If
End Sub

Chỗ đỏ đỏ là sửa, chỗ xanh xanh là thêm vào.


[A2] = "A1"
Bạn thử chạy code dùm mình chưa, mình chạy code trên khi không lock thì ok, nhưng lock thì báo lỗi, bạn xem hình giúp mình thêm chút.chỗ code sau:
....
With EditSheet
.Cells(EditRow, 2).Value = a
.Cells(EditRow, 3).Value = b
.Cells(EditRow, 4).Value = c
listbox_nhaplieu.List(EditRow - 2, 1) = a
listbox_nhaplieu.List(EditRow - 2, 2) = b
listbox_nhaplieu.List(EditRow - 2, 3) = c
End With
.....


View attachment 113947
 
Upvote 0
Bạn thử chạy code dùm mình chưa, mình chạy code trên khi không lock thì ok, nhưng lock thì báo lỗi, bạn xem hình giúp mình thêm chút.chỗ code sau:
....
With EditSheet
.Cells(EditRow, 2).Value = a
.Cells(EditRow, 3).Value = b
.Cells(EditRow, 4).Value = c
listbox_nhaplieu.List(EditRow - 2, 1) = a
listbox_nhaplieu.List(EditRow - 2, 2) = b
listbox_nhaplieu.List(EditRow - 2, 3) = c
End With
.....


View attachment 113947

Tôi chỉ test qua loa vì tôi nghĩ code trước không có lỗi mà bây giờ tôi chỉ thêm mỗi code kiểm tra mật khẩu thôi.

Tôi đã làm thế này: các sheet chưa có dữ liệu nhập, chỉ có mỗi [H2] = PASS do đã có sẵn trong tập tin củax bạn --> show Form --> chọn data1 --> nhập vào các textbox --> nhấn "nhap" --> dòng 2 trong data1 đã có dữ liệu và có PASS ở H2 --> bỏ chọn "Nhập dữ liệu" và chọn data1 trong combobox --> đã có dòng 2 trong listbox --> chọn mục trong listbox (có PASS) --> nhập mật khẩu hichic --> dữ liệu đã được load vào các textbox --> tôi sửa SoLuong --> nhấn nút "sua". Chả thấy lỗi gì cả.

Nếu bạn thấy lỗi thì rút kinh nghiệm lần sau. Hãy hướng dẫn người khác làm từng bước thao tác như thế nào (như tôi liệt kê ở trên) để có được cái lỗi đó. Cũng là nhấn nút, bỏ chọn CheckBox, chọn ComboBox, chọn trong ListBox nhưng có thể tuần tự thao tác khác đi thì có thể có lỗi hoặc không. Đấy là nói chung. Bạn không nói rõ thì người ta phải thử với mọi hoán vị của các thao tác trên à?
-----------
Về ListView tôi quên nói nhưng chỗ đỏ đỏ có nghĩa là nhập vào ListView 8 cột, vậy phải sửa ListView.ColumnCount = 8
Về cấu trúc của Sheet và Form phải đúng như ở bài #17. Tôi không làm cho bạn với cấu trúc mới nhất của bạn. Lý do thì tôi đã nói rồi.

Nếu bạn nói là có lỗi thì gửi tập tin của bạn lên và hướng dẫn từng bước thao tác để có được lỗi.
 
Upvote 0
Tôi chỉ test qua loa vì tôi nghĩ code trước không có lỗi mà bây giờ tôi chỉ thêm mỗi code kiểm tra mật khẩu thôi.

Tôi đã làm thế này: các sheet chưa có dữ liệu nhập, chỉ có mỗi [H2] = PASS do đã có sẵn trong tập tin củax bạn --> show Form --> chọn data1 --> nhập vào các textbox --> nhấn "nhap" --> dòng 2 trong data1 đã có dữ liệu và có PASS ở H2 --> bỏ chọn "Nhập dữ liệu" và chọn data1 trong combobox --> đã có dòng 2 trong listbox --> chọn mục trong listbox (có PASS) --> nhập mật khẩu hichic --> dữ liệu đã được load vào các textbox --> tôi sửa SoLuong --> nhấn nút "sua". Chả thấy lỗi gì cả.

Nếu bạn thấy lỗi thì rút kinh nghiệm lần sau. Hãy hướng dẫn người khác làm từng bước thao tác như thế nào (như tôi liệt kê ở trên) để có được cái lỗi đó. Cũng là nhấn nút, bỏ chọn CheckBox, chọn ComboBox, chọn trong ListBox nhưng có thể tuần tự thao tác khác đi thì có thể có lỗi hoặc không. Đấy là nói chung. Bạn không nói rõ thì người ta phải thử với mọi hoán vị của các thao tác trên à?
-----------
Về ListView tôi quên nói nhưng chỗ đỏ đỏ có nghĩa là nhập vào ListView 8 cột, vậy phải sửa ListView.ColumnCount = 8
Về cấu trúc của Sheet và Form phải đúng như ở bài #17. Tôi không làm cho bạn với cấu trúc mới nhất của bạn. Lý do thì tôi đã nói rồi.

Nếu bạn nói là có lỗi thì gửi tập tin của bạn lên và hướng dẫn từng bước thao tác để có được lỗi.
Mình làm với file bạn gửi lên và code đó không khác gì,các bước làm như bạn trên.Nhưng dòng màu xanh thì không thấy xuất hiện.

"các sheet chưa có dữ liệu nhập, chỉ có mỗi [H2] = PASS do đã có sẵn trong tập tin củax bạn --> show Form --> chọn data1 --> nhập vào các textbox --> nhấn "nhap" --> dòng 2 trong data1 đã có dữ liệu và có PASS ở H2 --> bỏ chọn "Nhập dữ liệu" và chọn data1 trong combobox --> đã có dòng 2 trong listbox --> chọn mục trong listbox (có PASS) --> nhập mật khẩu hichic --> dữ liệu đã được load vào các textbox --> tôi sửa SoLuong --> nhấn nút "sua"."

Nhưng bạn quên là lúc đó sheet data chưa lock mà nên sửa bình thường, câu hỏi của mình đã hỏi là nêu rõ sau khi nhập xong bạn SAVE thì cell có dữ liệu bị lock lại. Mình thêm code sau để lock dòng data vừa nhập vào sau khi save rồi thử chỉnh sửa dữ liệu như bạn làm thì mới có lỗi đó (Như mình đã hỏi để bạn sữa code là cell bi lock)

1. thêm vào module:
Function MySh(ByVal CodeName As String) As Worksheet
Dim Sh As Worksheet
For Each Sh In Worksheets
If Sh.CodeName = CodeName Then
Set MySh = Sh
Exit Function
End If
Next
Set MySh = Nothing
End Function


Sub LockSh()
Dim ShList(), I
Application.ScreenUpdating = False
ShList = Array("Sheet2", "Sheet3", "Sheet4")
For I = LBound(ShList) To UBound(ShList)
With MySh(ShList(I))
.Unprotect "hichic"
.Cells.Locked = False
.Range("A2:F400").SpecialCells(xlCellTypeConstants, 23).Locked = True
.Protect "hichic"
End With
Next


Application.ScreenUpdating = True
End Sub

2./ thêm vào thisworkbook:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)


'khoa cell da co du lieu
LockSh


End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mình làm với file bạn gửi lên và code đó không khác gì,các bước làm như bạn trên.Nhưng dòng màu xanh thì không thấy xuất hiện.

"các sheet chưa có dữ liệu nhập, chỉ có mỗi [H2] = PASS do đã có sẵn trong tập tin củax bạn --> show Form --> chọn data1 --> nhập vào các textbox --> nhấn "nhap" --> dòng 2 trong data1 đã có dữ liệu và có PASS ở H2 --> bỏ chọn "Nhập dữ liệu" và chọn data1 trong combobox --> đã có dòng 2 trong listbox --> chọn mục trong listbox (có PASS) --> nhập mật khẩu hichic --> dữ liệu đã được load vào các textbox --> tôi sửa SoLuong --> nhấn nút "sua"."

Nhưng bạn quên là lúc đó sheet data chưa lock mà nên sửa bình thường, câu hỏi của mình đã hỏi là nêu rõ sau khi nhập xong bạn SAVE thì cell có dữ liệu bị lock lại. Mình thêm code sau để lock dòng data vừa nhập vào sau khi save rồi thử chỉnh sửa dữ liệu như bạn làm thì mới có lỗi đó (Như mình đã hỏi để bạn sữa code là cell bi lock)

1. thêm vào module:
Function MySh(ByVal CodeName As String) As Worksheet
Dim Sh As Worksheet
For Each Sh In Worksheets
If Sh.CodeName = CodeName Then
Set MySh = Sh
Exit Function
End If
Next
Set MySh = Nothing
End Function


Sub LockSh()
Dim ShList(), I
Application.ScreenUpdating = False
ShList = Array("Sheet2", "Sheet3", "Sheet4")
For I = LBound(ShList) To UBound(ShList)
With MySh(ShList(I))
.Unprotect "hichic"
.Cells.Locked = False
.Range("A2:F400").SpecialCells(xlCellTypeConstants, 23).Locked = True
.Protect "hichic"
End With
Next


Application.ScreenUpdating = True
End Sub

2./ thêm vào thisworkbook:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)


'khoa cell da co du lieu
LockSh


End Sub

Tôi không quên là "Nhưng bạn quên là lúc đó sheet data chưa lock" đâu. Cái Protect, UnProtect là bây giờ bạn mới lôi ra.

Tôi đã nói nhiều mà bạn không hiểu? Tôi đã viết rất nhiều bài để moi từng thông tin từ bạn và bạn có rất nhiều cơ hội để bổ sung. Lúc đầu bạn chỉ nói lock, lock mà không giải thích gì cả và trong tập tin thì chả thấy lock gì. Tôi "van nài" thông tin thì bạn gửi tập tin có cột PASS, và bạn nói phải nhập password. Tôi cho đó là cái lock của bạn và kiểm tra PASS. Bạn hãy xem lại đi. Cái tập tin mà bạn cho là "mới nhất" mà trên cơ sở đó tôi làm và gửi trong bài #17 làm quái gì có những code Function MySh, LockSh?
Bây giờ bạn thêm vào và thấy lỗi, và nhờ tôi sửa code?

Bạn viết:

2./ thêm vào thisworkbook:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'khoa cell da co du lieu
LockSh
End Sub

Còn trong tập tin cối cùng là

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' tu dong danh END khi sheet thay doi vao cot "END SAMPLE"

Endsample
End Sub

Bạn nghĩ là bây giờ bạn cứ sửa, thêm thắt code rồi tôi lại hì hục sửa code cho bạn?

Bạn có rất nhiều cơ hội khi tôi van nài từng thông tin, yêu cầu thiết kế thật chuẩn. Bây giờ tôi đã chán cái trò cờ cưa rồi.
Tôi không viết thêm bài nào nữa. Bạn hãy coi như các bài của tôi trong chủ đề này là như không có. Bạn hãy hỏi và ai đó sẽ giúp bạn.
Chấm hết.
 
Upvote 0
Ah bạn giải thích chỉ dùm mình đoạn code auto đánh mã hàng phần số tăng theo ngày được không.
Mà bạn ơi phần dữ liệu đã nhập lần save trước, nêú vộ tình chọn và nhấp chỉnh sửa thì code báo lỗi (do đã protect).
bạn thêm code dùm nếu data đã khóa thì hỏi pass, có pass cho sửa, không có pass thì hủy bỏ lệnh sửa xóa data trên form.

Rõ ràng mình có nói ở bài này mà, dòng màu đỏ, từ pass ở đây là mình nói password .Bạn lại hiểu nhầm. Code này trong form minh đưa lên mình bỏ đi chứ thêm gì, bạn chỉ cần giúp mình sửa code của bạn thôi, bạn chỉ cần protect sheet theo cách của bạn rồi bạn làm code dùm mình được không.coi như không có code protect mình đem lên, code đó file mình làm có lỗi gì đâu.Bạn không cần quan tâm cái đó đâu.

File mình gửi lên là sheet data1 có 3 dòng, data2 và data3 có 2 dòng dữ liệu, cột [Result] =PASS or Fail là kết quả dữ liệu của mình chứ mình đâu viết cho sửa theo đó đâu.Bạn hiểu nhầm ý mình ngay từ đâu rồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Rõ ràng mình có nói ở bài này mà, dòng màu đỏ, từ pass ở đây là mình nói password .Bạn lại hiểu nhầm.

Bạn có viết nhưng bạn biết là ở bài nào không? Ở bài #20!
Cho tới tận bài #12 của chủ đề, trong nhiều bài tôi đã phải moi thông tin từ bạn, bạn có cơ hội để cung cấp thông tin cụ thể, chính xác. Vậy khi bạn nói ở bài #13 là bạn đã gửi tập tin mới nhất thì trong bài #17 tôi đã làm dựa trên cái tập tin mới nhất kia. Trong đó không có Protect và UnProtect. Trước đó bạn chỉ nói chung chung là lock, lock vậy khi nhìn code chả thấy Protect gì mà chỉ thấy cột PASS thì tôi cho là cái lock kia nó có "hình hài" là: cột nào có PASS thì bắt phải nhập, nhập đúng password thì cho sửa. Tôi viết thêm code kiểm tra password chẳng qua là bạn có cột PASS mà tôi không chú ý tới nên lỗi là ở tôi và tôi sẵn sàng sửa. Còn cái UnProtect, Protect kia chúng không có ở thời điểm tôi trả lời nên tôi không chấp nhận. Thế thôi.

Trong bài #17 tôi cũng nói rõ là
Tôi đã mất rất nhiều thời gian để biết được cụ thể bạn định làm những gì. Bây giờ tôi không muốn mất thêm thời gian để "thống nhất", "sáng tỏ" ý định của bạn nữa. Nếu code có lỗi trong phần đã làm thì tôi sẽ sửa. Nhưng làm "cái mới" thì không.

Vậy thì những gì bạn viết ở bài #20 hay những thay đổi về cơ cấu của sheet và form sau bài #17 đối với tôi chúng như là không có. Bạn có nhiều thời gian để nói rõ, để thêm code, để sửa cấu trúc sheet và form mà bạn không làm thì sau bài #17 tôi không chấp nhận nữa.

Tôi đã nói rồi, và khi tôi đã nói "chấm hết" tức là chấm hết thực sự.
 
Upvote 0
Bạn có viết nhưng bạn biết là ở bài nào không? Ở bài #20!
Cho tới tận bài #12 của chủ đề, trong nhiều bài tôi đã phải moi thông tin từ bạn, bạn có cơ hội để cung cấp thông tin cụ thể, chính xác. Vậy khi bạn nói ở bài #13 là bạn đã gửi tập tin mới nhất thì trong bài #17 tôi đã làm dựa trên cái tập tin mới nhất kia. Trong đó không có Protect và UnProtect. Trước đó bạn chỉ nói chung chung là lock, lock vậy khi nhìn code chả thấy Protect gì mà chỉ thấy cột PASS thì tôi cho là cái lock kia nó có "hình hài" là: cột nào có PASS thì bắt phải nhập, nhập đúng password thì cho sửa. Tôi viết thêm code kiểm tra password chẳng qua là bạn có cột PASS mà tôi không chú ý tới nên lỗi là ở tôi và tôi sẵn sàng sửa. Còn cái UnProtect, Protect kia chúng không có ở thời điểm tôi trả lời nên tôi không chấp nhận. Thế thôi.

Trong bài #17 tôi cũng nói rõ là


Vậy thì những gì bạn viết ở bài #20 hay những thay đổi về cơ cấu của sheet và form sau bài #17 đối với tôi chúng như là không có. Bạn có nhiều thời gian để nói rõ, để thêm code, để sửa cấu trúc sheet và form mà bạn không làm thì sau bài #17 tôi không chấp nhận nữa.

Tôi đã nói rồi, và khi tôi đã nói "chấm hết" tức là chấm hết thực sự.
Thôi không làm phiền bạn nữa, bạn nói vậy thì cũng chịu.Diễn đàn để chia sẽ giúp đỡ cải qua cãi lại mất thời gian mọi người thôi.
 
Upvote 0
Đành nhờ các thành viên nhiệt tình giúp đỡ tiếp.
 
Lần chỉnh sửa cuối:
Upvote 0
Hic có ai nhiệt tình giúp dùm e với, file e làm tới đây còn chút chỉnh sửa trên form nữa mà chưa được.E mới tập làm macro ah.
 
Upvote 0

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

Back
Top Bottom