Thiết lập file excel lưu trữ lịch sử

Liên hệ QC

CaoNgan99

Thành viên mới
Tham gia
19/12/21
Bài viết
28
Được thích
1
Giới tính
Nữ
Em chào các anh chị !
hiện em có một file em đang xây dựng để lưu trữ lịch sử các đơn hàng.
Tại sheet historys
khi nhấn vào nút "refresh All" sẽ lấy toàn bộ dữ liệu ở sheet summary đổ sang sheet historys từ A2 đến Y, mỗi khi có dữ liệu mới từ sheet summary thì sẽ được thêm nối tiếp vào sheet historys.

từ cột Z đến AQ là cập nhật từ các sheet khác,
Điều cập nhật là nếu tìm thấy dữ liệu tại cột A sheet Historys ở các sheet còn lại (MATER_ITEM, SHIPOUT, ORDER_SCAN, BY_DATE, KITTING, MATERIAL_SHORTAGE, PRINT_STAGE, CUT_STAGE, BCNK, SOL_CANCEL) thì trả về các vùng tương ứng, mỗi lần các sheet khác thay đổi nội dung thì các vùng bên sheet History cũng được cập nhật theo
và nếu dữ liệu ở các sheet summary hay các sheet khác bị mất thì dữ liệu trong sheet historys không bị mất đi

code thì hiện tại em đã nhặt nhạnh khắp nơi để lắp ghép chỉ còn duy nhất một sheet MATER_ITEM là em không thể nào lắp ghép được vì tham số nằm ở cột L chứ không phải cột A nữa, em đã thử rất nhiều lần nó báo lỗi,

Mã:
For t = 1 To UBound(Sarr_Item)
  Tmp_Item = Sarr_Item(t, 1)
  Dic.Add (Tmp_Item), t
  'If DR(i, 19) <> "AWAITING_SHIPPING" Or DR(i, 19) <> "AWAITING_FULFILLMENT" Then 'co the tuy chinh
    Dic95.Add (Tmp_Item), t
    If DR_Item(t, 8) = "AWAITING_FULFILLMENT" Or DR_Item(t, 8) = "AWAITING_SHIPPING" Or DR_Item(t, 8) = "PRODUCTION_OPEN" Or DR_Item(i, 8) = "EXTERNAL_REQ_OPEN" Or DR_Item(t, 8) = "PO_PARTIAL" Or DR_Item(t, 8) = "PO_OPEN" Or DR_Item(t, 8) = "BOOKED" Or DR_Item(t, 8) = "SUPPLY_ELIGIBLE" Or DR_Item(t, 8) = "ENTERED" Then Dic35.Add (Tmp_Item), t
  'End If
Next t

nên em đã đặt công thức vlookup tại cột AM đến AO sheet historys để anh chị xem và sửa giúp em với, vì bình thường em có thể vlookup nhưng dữ liệu có lúc lên đến 60000 dòng chạy rất chậm.

em cám ơn trước ạ
 

File đính kèm

  • History.xlsb
    2.9 MB · Đọc: 26
Lần chỉnh sửa cuối:
Em chào các anh chị !
hiện em có một file em đang xây dựng để lưu trữ lịch sử các đơn hàng.
Tại sheet historys
khi nhấn vào nút "refresh All" sẽ lấy toàn bộ dữ liệu ở sheet summary đổ sang sheet historys từ A2 đến Y, mỗi khi có dữ liệu mới từ sheet summary thì sẽ được thêm nối tiếp vào sheet historys.

từ cột Z đến AQ là cập nhật từ các sheet khác,
Điều cập nhật là nếu tìm thấy dữ liệu tại cột A sheet Historys ở các sheet còn lại (MATER_ITEM, SHIPOUT, ORDER_SCAN, BY_DATE, KITTING, MATERIAL_SHORTAGE, PRINT_STAGE, CUT_STAGE, BCNK, SOL_CANCEL) thì trả về các vùng tương ứng, mỗi lần các sheet khác thay đổi nội dung thì các vùng bên sheet History cũng được cập nhật theo
và nếu dữ liệu ở các sheet summary hay các sheet khác bị mất thì dữ liệu trong sheet historys không bị mất đi

code thì hiện tại em đã nhặt nhạnh khắp nơi để lắp ghép chỉ còn duy nhất một sheet MATER_ITEM là em không thể nào lắp ghép được vì tham số nằm ở cột L chứ không phải cột A nữa, em đã thử rất nhiều lần nó báo lỗi,

Mã:
For t = 1 To UBound(Sarr_Item)
  Tmp_Item = Sarr_Item(t, 1)
  Dic.Add (Tmp_Item), t
  'If DR(i, 19) <> "AWAITING_SHIPPING" Or DR(i, 19) <> "AWAITING_FULFILLMENT" Then 'co the tuy chinh
    Dic95.Add (Tmp_Item), t
    If DR_Item(t, 8) = "AWAITING_FULFILLMENT" Or DR_Item(t, 8) = "AWAITING_SHIPPING" Or DR_Item(t, 8) = "PRODUCTION_OPEN" Or DR_Item(i, 8) = "EXTERNAL_REQ_OPEN" Or DR_Item(t, 8) = "PO_PARTIAL" Or DR_Item(t, 8) = "PO_OPEN" Or DR_Item(t, 8) = "BOOKED" Or DR_Item(t, 8) = "SUPPLY_ELIGIBLE" Or DR_Item(t, 8) = "ENTERED" Then Dic35.Add (Tmp_Item), t
  'End If
Next t

nên em đã đặt công thức vlookup tại cột AM đến AO sheet historys để anh chị xem và sửa giúp em với, vì bình thường em có thể vlookup nhưng dữ liệu có lúc lên đến 60000 dòng chạy rất chậm.

em cám ơn trước ạ
Code trong Sub History của bạn khó hiểu quá.
Tôi đọc và tự hỏi sao là sao bạn không gán Từ A2:Y... của sh SUMARY thành một Array Tạm đặt là Arr và chạy vòng lặp từ 1 đến Ubound(Arr). trong đó lấy các phần tử của cột nào làm dic thì add vào. và thực hiện các tác vụ tiếp theo.....

" từ cột Z đến AQ là cập nhật từ các sheet khác," thì cập nhật theo điều kiện nào?
"Điều cập nhật là nếu tìm thấy dữ liệu tại cột A sheet Historys " ở cột nào? của " các sheet còn lại (MATER_ITEM, SHIPOUT, ORDER_SCAN, BY_DATE, KITTING, MATERIAL_SHORTAGE, PRINT_STAGE, CUT_STAGE, BCNK, SOL_CANCEL) thì trả về các vùng tương ứng" là vùng nào?" , mỗi lần các sheet khác thay đổi nội dung thì các vùng bên sheet History cũng được cập nhật theo.."
 
Upvote 0
Code trong Sub History của bạn khó hiểu quá.
Tôi đọc và tự hỏi sao là sao bạn không gán Từ A2:Y... của sh SUMARY thành một Array Tạm đặt là Arr và chạy vòng lặp từ 1 đến Ubound(Arr). trong đó lấy các phần tử của cột nào làm dic thì add vào. và thực hiện các tác vụ tiếp theo.....

" từ cột Z đến AQ là cập nhật từ các sheet khác," thì cập nhật theo điều kiện nào?
"Điều cập nhật là nếu tìm thấy dữ liệu tại cột A sheet Historys " ở cột nào? của " các sheet còn lại (MATER_ITEM, SHIPOUT, ORDER_SCAN, BY_DATE, KITTING, MATERIAL_SHORTAGE, PRINT_STAGE, CUT_STAGE, BCNK, SOL_CANCEL) thì trả về các vùng tương ứng" là vùng nào?" , mỗi lần các sheet khác thay đổi nội dung thì các vùng bên sheet History cũng được cập nhật theo.."
Dạ là do em lấy code từ trên diễn đàn giaiphapexcel để lắp ghép thôi ạ, chứ em hoàn toàn không có khả năng code.
nên mới thành ra như vậy, em xin trả lời từng ý của anh nhé nhé để a dễ hiểu

" từ cột Z đến AQ là cập nhật từ các sheet khác," thì cập nhật theo điều kiện nào? -> theo điều kiện lấy cột A sheet Historys làm tham số.

'' Điều cập nhật là nếu tìm thấy dữ liệu tại cột A sheet Historys ở cột nào? của các sheet còn lại (MATER_ITEM, SHIPOUT, ORDER_SCAN, BY_DATE, KITTING, MATERIAL_SHORTAGE, PRINT_STAGE, CUT_STAGE, BCNK, SOL_CANCEL)
-> SHIPOUT(Cột A), ORDER_SCAN(cột A), BY_DATE(Cột A), KITTING(Cột A), MATERIAL_SHORTAGE(Cột B), PRINT_STAGE(Cột A), CUT_STAGE(Cột A), BCNK(Cột B), SOL_CANCEL(Cột A),


" là vùng nào?
-Nếu tìm thấy cột A sheet historys ở cột A bên sheet SHIPOUT thì lấy dữ liệu ở các cột B, C trả về vùng
Z, AA sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet ORDER_SCAN thì lấy dữ liệu ở cột C trả về vùng
AB sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet BY_DATE thì lấy dữ liệu ở cột B trả về vùng
AP sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet KITTING thì lấy dữ liệu ở cột B trả về vùng
AC sheet historys


-Nếu tìm thấy cột A sheet historys ở cột B bên sheet MATERIAL_SHORTAGE thì lấy dữ liệu ở cột N trả về vùng
AD sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet PRINT_STAGE thì lấy dữ liệu ở các cột B C D trả về vùng
AE, AF, AG sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet CUT_STAGE thì lấy dữ liệu ở các cột B C D trả về vùng
AH, AI, AJ sheet historys


-Nếu tìm thấy cột A sheet historys ở cột B bên sheet BCNK thì lấy dữ liệu ở các cột C D trả về vùng
AK, AL sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet SOL_CANCEL thì lấy dữ liệu ở cột B trả về vùng
AQ sheet historys


riêng sheet MATER_ITEM thì điều kiện khác một chút là nếu tìm thấy cột L sheet historys ở cột B bên sheet MATER_ITEM thì lấy dữ liệu ở các cột E F G trả về vùng AM, AN, AO sheet historys

các cột B,C,D,E và S của sheet historys sẽ được cập nhật từ sheet summary dựa theo điều kiện cả 2 sheet đều có cột A làm khóa chính, tức là nếu tìm thấy cột A của sheet historys bên cột A của sheet summary thì lấy dữ liệu của các cột B,C,D,E và S cập nhật sang các cột B,C,D,E và S của sheet historys.
 
Lần chỉnh sửa cuối:
Upvote 0
Đừng bắt người khác phải dò code của mình để đoán ra ý của mình. Đoán ý trên cơ sở code rất cực khi không có chú thích. Và nếu code sai hoặc không chuẩn thì nhiều khi từ code KHÔNG THỂ ĐOÁN được ý. Ý chỉ có thể đoán được từ code đúng. Ngoài ra không phải ai cũng có hứng dò code của người khác. Và cái quan trọng nhất, tại sao tôi phải bỏ công ra đoán trong khi vấn đề của người ta, người ta có thể mô tả nhưng không mô tả?
khi nhấn vào nút "refresh All" sẽ lấy toàn bộ dữ liệu ở sheet summary đổ sang sheet historys từ A2 đến Y, mỗi khi có dữ liệu mới từ sheet summary thì sẽ được thêm nối tiếp vào sheet historys.
Thế nào là "dữ liệu mới"? Vd. dòng dữ liệu trong SUMMARY mà A & B & C & ... & Z KHÔNG BẰNG bất cứ A & B & C & ... & Z trong HISTORYS thì là DỮ LIỆU MỚI? Tôi biết là không phải thế. Vậy phải thế là thế nào? Khái niệm "dữ liệu mới" thế nào?
Điều cập nhật là nếu tìm thấy dữ liệu tại cột A sheet Historys ở các sheet còn lại (MATER_ITEM, SHIPOUT, ORDER_SCAN, BY_DATE, KITTING, MATERIAL_SHORTAGE, PRINT_STAGE, CUT_STAGE, BCNK, SOL_CANCEL) thì trả về các vùng tương ứng

Tôi hiểu là khi duyệt SUMMARY thì:
- giá trị cần tìm: từng giá trị trong cột A (?) của SUMMARY
- nơi cần tìm: cột A (?) của HISTORYS

Tôi hiểu như trên là đúng?

Khi duyệt MATER_ITEM, SHIPOUT, ... thì ngược lại;
- giá trị cần tìm: từng giá trị trong cột "A" hoặc "L" của sheet HISTORYS
- nơi cần tìm: cột "A" hoặc "B" của sheet ĐANG DUYỆT

Tôi hiểu như trên là đúng?

Nếu tôi hiểu chưa đúng thì đúng là phải thế nào?

Ngoài ra thứ tự thao tác rất quan trọng. Ở trên theo tôi hiểu thì khi duyệt SUMMARY thì nếu có "dữ liệu mới" thì THÊM vào dòng cuối của HISTORYS. Vậy thì nếu duyệt SUMMARY trước khi duyệt MATER_ITEM, SHIPOUT, ... sẽ cho kết quả khác với duyệt MATER_ITEM, SHIPOUT, ... trước khi duyệt SUMMARY.

Tóm lại là mô tả chính xác THỨ TỰ thao tác. Và:
- khi duyệt SUMMARY thì lấy gì, từ đâu, để tìm ở đâu. Khi thỏa điều kiện gì thì lấy gì, từ đâu, để nhập vào đâu.
- khi duyệt MATER_ITEM, SHIPOUT, ... thì lấy gì, từ đâu, để tìm ở đâu. Khi thỏa điều kiện gì thì lấy gì, từ đâu, để nhập vào đâu.
--------------
Sau khi đọc ở bài #3
các cột B,C,D,E và S của sheet historys sẽ được cập nhật từ sheet summary dựa theo điều kiện cả 2 sheet đều có cột A làm khóa chính, tức là nếu tìm thấy cột A của sheet historys bên cột A của sheet summary thì lấy dữ liệu của các cột B,C,D,E và S cập nhật sang các cột B,C,D,E và S của sheet historys.
thì tôi thử đoán như sau:
1. Thứ tự thao tác: trước tiên duyệt SUMMARY, tiếp theo là các sheet được liệt kê trong bài #1.

2. Duyệt SUMMARY.
Dò từng SOL trong cột A của SUMMARY trong cột A của HISTORYS. Tôi cho là khi không tìm thấy SOL hiện hành thì dòng chứa SOL đó là "Dữ liệu mới". Nhưng tôi không dám chắc vì tôi không hiểu tại sao trong code lại có kiểm tra xem cột S của HISTORYS có là AWAITING_SHIPPING, ... hay không. Tôi không theo dõi kỹ vì mệt lắm.
Nếu tìm thấy SOL trong HISTORYS thì lấy B, C, D, E và S từ SUMMARY sang HISTORYS. Nếu không tìm thấy SOL (dữ liệu mới?) thì lấy toàn bộ dòng chứa SOL đó từ SUMMARY sang thêm vào dòng cuối của HISTORYS.

Tôi hiểu như trên là đúng? Hãy phát biểu rõ, thế nào là "dữ liệu mới".

3. Khi duyệt các sheet MATER_ITEM, SHIPOUT, ... thì như bài #3: khi tìm thấy thì lấy từ các sheet đang duyệt sang HISTORYS. Thế nếu không tìm thấy thì sao? Thì KHÔNG LÀM GÌ? Mọi cái nên nói huỵch toẹt ra, đừng bắt người khác phải đoán ý.
 
Upvote 0
Đừng bắt người khác phải dò code của mình để đoán ra ý của mình. Đoán ý trên cơ sở code rất cực khi không có chú thích. Và nếu code sai hoặc không chuẩn thì nhiều khi từ code KHÔNG THỂ ĐOÁN được ý. Ý chỉ có thể đoán được từ code đúng. Ngoài ra không phải ai cũng có hứng dò code của người khác. Và cái quan trọng nhất, tại sao tôi phải bỏ công ra đoán trong khi vấn đề của người ta, người ta có thể mô tả nhưng không mô tả?

Thế nào là "dữ liệu mới"? Vd. dòng dữ liệu trong SUMMARY mà A & B & C & ... & Z KHÔNG BẰNG bất cứ A & B & C & ... & Z trong HISTORYS thì là DỮ LIỆU MỚI? Tôi biết là không phải thế. Vậy phải thế là thế nào? Khái niệm "dữ liệu mới" thế nào?


Tôi hiểu là khi duyệt SUMMARY thì:
- giá trị cần tìm: từng giá trị trong cột A (?) của SUMMARY
- nơi cần tìm: cột A (?) của HISTORYS

Tôi hiểu như trên là đúng?

Khi duyệt MATER_ITEM, SHIPOUT, ... thì ngược lại;
- giá trị cần tìm: từng giá trị trong cột "A" hoặc "L" của sheet HISTORYS
- nơi cần tìm: cột "A" hoặc "B" của sheet ĐANG DUYỆT

Tôi hiểu như trên là đúng?

Nếu tôi hiểu chưa đúng thì đúng là phải thế nào?

Ngoài ra thứ tự thao tác rất quan trọng. Ở trên theo tôi hiểu thì khi duyệt SUMMARY thì nếu có "dữ liệu mới" thì THÊM vào dòng cuối của HISTORYS. Vậy thì nếu duyệt SUMMARY trước khi duyệt MATER_ITEM, SHIPOUT, ... sẽ cho kết quả khác với duyệt MATER_ITEM, SHIPOUT, ... trước khi duyệt SUMMARY.

Tóm lại là mô tả chính xác THỨ TỰ thao tác. Và:
- khi duyệt SUMMARY thì lấy gì, từ đâu, để tìm ở đâu. Khi thỏa điều kiện gì thì lấy gì, từ đâu, để nhập vào đâu.
- khi duyệt MATER_ITEM, SHIPOUT, ... thì lấy gì, từ đâu, để tìm ở đâu. Khi thỏa điều kiện gì thì lấy gì, từ đâu, để nhập vào đâu.
--------------
Sau khi đọc ở bài #3

thì tôi thử đoán như sau:
1. Thứ tự thao tác: trước tiên duyệt SUMMARY, tiếp theo là các sheet được liệt kê trong bài #1.

2. Duyệt SUMMARY.
Dò từng SOL trong cột A của SUMMARY trong cột A của HISTORYS. Tôi cho là khi không tìm thấy SOL hiện hành thì dòng chứa SOL đó là "Dữ liệu mới". Nhưng tôi không dám chắc vì tôi không hiểu tại sao trong code lại có kiểm tra xem cột S của HISTORYS có là AWAITING_SHIPPING, ... hay không. Tôi không theo dõi kỹ vì mệt lắm.
Nếu tìm thấy SOL trong HISTORYS thì lấy B, C, D, E và S từ SUMMARY sang HISTORYS. Nếu không tìm thấy SOL (dữ liệu mới?) thì lấy toàn bộ dòng chứa SOL đó từ SUMMARY sang thêm vào dòng cuối của HISTORYS.

Tôi hiểu như trên là đúng? Hãy phát biểu rõ, thế nào là "dữ liệu mới".

3. Khi duyệt các sheet MATER_ITEM, SHIPOUT, ... thì như bài #3: khi tìm thấy thì lấy từ các sheet đang duyệt sang HISTORYS. Thế nếu không tìm thấy thì sao? Thì KHÔNG LÀM GÌ? Mọi cái nên nói huỵch toẹt ra, đừng bắt người khác phải đoán ý.
Dạ em xin lỗi, em không cố ý gây khó hiểu vậy, em xin giải thích các câu hỏi của anh

Thế nào là "dữ liệu mới"? Vd. dòng dữ liệu trong SUMMARY mà A & B & C & ... & Z KHÔNG BẰNG bất cứ A & B & C & ... & Y trong HISTORYS thì là DỮ LIỆU MỚI?-> chính xác anh nhé, dữ liệu mới là dữ liệu được thêm vào sheet summary nhưng chưa có bên sheet historys thông qua cột A là khóa chính

Tôi hiểu là khi duyệt SUMMARY thì:
- giá trị cần tìm: từng giá trị trong cột A (?) của SUMMARY
- nơi cần tìm: cột A (?) của HISTORYS

Tôi hiểu như trên là đúng?-> chính xác anh nhé

Khi duyệt MATER_ITEM, SHIPOUT, ... thì ngược lại;
- giá trị cần tìm: từng giá trị trong cột "A" hoặc "L" của sheet HISTORYS
- nơi cần tìm: cột "A" hoặc "B" của sheet ĐANG DUYỆT

Tôi hiểu như trên là đúng?-> chính xác ạ

Ngoài ra thứ tự thao tác rất quan trọng. Ở trên theo tôi hiểu thì khi duyệt SUMMARY thì nếu có "dữ liệu mới" thì THÊM vào dòng cuối của HISTORYS. Vậy thì nếu duyệt SUMMARY trước khi duyệt MATER_ITEM, SHIPOUT, ... sẽ cho kết quả khác với duyệt MATER_ITEM, SHIPOUT, ... trước khi duyệt SUMMARY. -> chính xác ạ

các cột B,C,D,E và S của sheet historys sẽ được cập nhật từ sheet summary dựa theo điều kiện cả 2 sheet đều có cột A làm khóa chính, tức là nếu tìm thấy cột A của sheet historys bên cột A của sheet summary thì lấy dữ liệu của các cột B,C,D,E và S cập nhật sang các cột B,C,D,E và S của sheet historys.

1. Thứ tự thao tác: trước tiên duyệt SUMMARY, tiếp theo là các sheet được liệt kê trong bài #1.

2. Duyệt SUMMARY.
Dò từng SOL trong cột A của SUMMARY trong cột A của HISTORYS. Tôi cho là khi không tìm thấy SOL hiện hành thì dòng chứa SOL đó là "Dữ liệu mới". Nhưng tôi không dám chắc vì tôi không hiểu tại sao trong code lại có kiểm tra xem cột S của HISTORYS có là AWAITING_SHIPPING, ... hay không. Tôi không theo dõi kỹ vì mệt lắm. -> cái này là do code khi em nhặt họ đã để theo trạng thái, em không biết code lại nên em lấy về và hợp thức hóa bằng cách thêm điều kiện của cột S vào để quét toàn bộ dữ liệu thôi ah, chứ còn chứ còn dữ liệu mới như em đã trình bày là dựa vào khóa chính ở cột A giữa 2 sheet summary và historys để lấy ra toàn bộ các dòng có ở sheet summary nhưng không có ở historys thì được gọi là dữ liệu mới để thêm nối tiếp vào sheet historys

3. Khi duyệt các sheet MATER_ITEM, SHIPOUT, ... thì như bài #3: khi tìm thấy thì lấy từ các sheet đang duyệt sang HISTORYS. Thế nếu không tìm thấy thì sao? Thì KHÔNG LÀM GÌ? Mọi cái nên nói huỵch toẹt ra, đừng bắt người khác phải đoán ý. -> nếu không tìm thấy thì không cần làm gì anh nhé


tương tự các cột B,C,D,E và S của sheet historys sẽ được cập nhật từ sheet summary dựa theo điều kiện cả 2 sheet đều có cột A làm khóa chính, tức là nếu tìm thấy cột A của sheet historys bên cột A của sheet summary thì lấy dữ liệu của các cột B,C,D,E và S cập nhật sang các cột B,C,D,E và S của sheet historys.

Em xin tổng hợp lại thứ tự nhé

1) lấy toàn bộ dữ liệu mới từ sheet summary từ cột A đến Y sang sheet historys
2) cập nhật B,C,D,E và S của sheet historys theo sheet sheet summary dựa trên cột A làm khóa chính của 2 sheet

3) cập nhật dữ liệu từ các sheet MATER_ITEM, SHIPOUT, ORDER_SCAN, BY_DATE, KITTING, MATERIAL_SHORTAGE, PRINT_STAGE, CUT_STAGE, BCNK, SOL_CANCEL vào sheet historys.
4) Nếu dữ liệu ở sheet summary và các sheet khác bị mất thì dữ liệu trong sheet historys vẫn được bảo toàn
 
Upvote 0
Thế nào là "dữ liệu mới"? Vd. dòng dữ liệu trong SUMMARY mà A & B & C & ... & Z KHÔNG BẰNG bất cứ A & B & C & ... & Y trong HISTORYS thì là DỮ LIỆU MỚI?-> chính xác anh nhé, dữ liệu mới là dữ liệu được thêm vào sheet summary nhưng chưa có bên sheet historys thông qua cột A là khóa chính
Thông qua là cái khỉ gì. Tôi đang nói tới:
a. hoặc mới là A & B & ... & Z mới
b. hoặc mới là A mới

Vd. Bên HISTORYS có A = 12345, B = "blala, C = "hic hic", Bên SUMMARY có A = 12345, B = "blala, C = "he he". Vậy đó có là DỮ LIỆU MỚI không? Theo a. thì là DỮ LIỆU MỚI do "12345blalahe he" <> "12345blalahic hic", còn theo b. thì không là dữ liệu mới vì 12345 (SUMMARY) = 12345 (HISTORYS).

Hoặc mới là khi ít nhất 1 cột trong A:Z là mới, hoặc mới là khi có A mới. Làm gì có kiểu: mới khi ít nhất 1 cột trong A:Z là mới THÔNG QUA cột A.

Thôi tôi không đọc tiếp nữa. Tôi sẽ làm theo một giả thiết nhất định.

1. Trước hết duyệt SUMMARY. kiểm tra từng SOL có trong cột A của HISTORYS không. Nếu có rồi thì cập nhật B,C,D,E và S của sheet historys. Nếu chưa có SOL đang xét trong HISTORYS!A thì toàn bộ dòng có SOL đó từ A tới Y được nhập vào dòng cuối bên HISTORYS.

2. Sau khi duyệt SUMMARY thì duyệt các sheet khác theo mô tả ở bài #3.

3. Tôi không dò code của bạn, mệt lắm. Tôi thử đập đi xây mới. Tôi viết lại Sub History

4. Có nhiều cái bạn phải kiểm tra lại.

1. Trong SUMMARY dạng dữ liệu X572:X573, Y572:Y573 (đều là các số) không ăn nhập gì với dạng của cột X và Y (dạng text). Tương tự Y2470, M174:M185, và nhiều khoảng nữa trong cột M. Vì thế sang HISTORYS cũng kỳ cục - X566:Y567 và Y2464, và M173:M184 và nhiều khoảng nữa trong cột M

2. Trong SUMMARY chắc chắn cột C, D và E không có ngày tháng chuẩn, và chúng được coi là có dạng MM/dd/yyyy. Vì thế khi chạy trên máy bạn thì có thể sẽ có vd. HISTORYS!C2 = 06 tháng 10 năm 2021, nhưng khi chạy code ở máy tôi sẽ có HISTORYS!C2 = 10 tháng 06 năm 2021. Nguyên nhân là do SUMMARY!C2 không là ngày tháng chuẩn - khi mở trên máy tôi C2 được căn trái. Trên máy tôi thì sau khi chạy code trong HISTORYS!C, D, E hoặc sẽ có ngày tháng chuẩn nhưng ngày tháng sẽ bị đổi chỗ (bên SUMMARY có số đầu < 13), hoặc ngày tháng "nhái" (bên SUMMARY số đầu > 12), chúng được bê y nguyên từ SUMMARY sang HISTORYS .

Tóm lại nếu nói về dữ liệu nguồn trong SUMMARY thì phải kiểm tra lại cột C, D, E (ngày tháng không chuẩn), và cột M, X, Y - định dạng ô không phù hợp, dạng dữ liệu không ăn nhập gì với dạng của cột, tức khác với dạng của các dữ liệu khác trong cùng cột.

Tất nhiên phải kiểm tra xem kết quả code có đúng ý không.
 

File đính kèm

  • bHistory.xlsb
    2.7 MB · Đọc: 16
Upvote 0
Thông qua là cái khỉ gì. Tôi đang nói tới:
a. hoặc mới là A & B & ... & Z mới
b. hoặc mới là A mới

Vd. Bên HISTORYS có A = 12345, B = "blala, C = "hic hic", Bên SUMMARY có A = 12345, B = "blala, C = "he he". Vậy đó có là DỮ LIỆU MỚI không? Theo a. thì là DỮ LIỆU MỚI do "12345blalahe he" <> "12345blalahic hic", còn theo b. thì không là dữ liệu mới vì 12345 (SUMMARY) = 12345 (HISTORYS).

Hoặc mới là khi ít nhất 1 cột trong A:Z là mới, hoặc mới là khi có A mới. Làm gì có kiểu: mới khi ít nhất 1 cột trong A:Z là mới THÔNG QUA cột A.

Thôi tôi không đọc tiếp nữa. Tôi sẽ làm theo một giả thiết nhất định.

1. Trước hết duyệt SUMMARY. kiểm tra từng SOL có trong cột A của HISTORYS không. Nếu có rồi thì cập nhật B,C,D,E và S của sheet historys. Nếu chưa có SOL đang xét trong HISTORYS!A thì toàn bộ dòng có SOL đó từ A tới Y được nhập vào dòng cuối bên HISTORYS.

2. Sau khi duyệt SUMMARY thì duyệt các sheet khác theo mô tả ở bài #3.

3. Tôi không dò code của bạn, mệt lắm. Tôi thử đập đi xây mới. Tôi viết lại Sub History

4. Có nhiều cái bạn phải kiểm tra lại.

1. Trong SUMMARY dạng dữ liệu X572:X573, Y572:Y573 (đều là các số) không ăn nhập gì với dạng của cột X và Y (dạng text). Tương tự Y2470, M174:M185, và nhiều khoảng nữa trong cột M. Vì thế sang HISTORYS cũng kỳ cục - X566:Y567 và Y2464, và M173:M184 và nhiều khoảng nữa trong cột M

2. Trong SUMMARY chắc chắn cột C, D và E không có ngày tháng chuẩn, và chúng được coi là có dạng MM/dd/yyyy. Vì thế khi chạy trên máy bạn thì có thể sẽ có vd. HISTORYS!C2 = 06 tháng 10 năm 2021, nhưng khi chạy code ở máy tôi sẽ có HISTORYS!C2 = 10 tháng 06 năm 2021. Nguyên nhân là do SUMMARY!C2 không là ngày tháng chuẩn - khi mở trên máy tôi C2 được căn trái. Trên máy tôi thì sau khi chạy code trong HISTORYS!C, D, E hoặc sẽ có ngày tháng chuẩn nhưng ngày tháng sẽ bị đổi chỗ (bên SUMMARY có số đầu < 13), hoặc ngày tháng "nhái" (bên SUMMARY số đầu > 12), chúng được bê y nguyên từ SUMMARY sang HISTORYS .

Tóm lại nếu nói về dữ liệu nguồn trong SUMMARY thì phải kiểm tra lại cột C, D, E (ngày tháng không chuẩn), và cột M, X, Y - định dạng ô không phù hợp, dạng dữ liệu không ăn nhập gì với dạng của cột, tức khác với dạng của các dữ liệu khác trong cùng cột.

Tất nhiên phải kiểm tra xem kết quả code có đúng ý không.
Em cảm ơn anh nhé,
về phần định dạng ngày tháng thì đúng là nó đang khác định dạng, trước em cũng bị rồi và em phải đưa thêm
Sarr(k, 3) = Format(DR(i, 3), "dd/mmm/yyyy")
Sarr(k, 4) = Format(DR(i, 4), "dd/mmm/yyyy")
Sarr(k, 5) = Format(DR(i, 5), "dd/mmm/yyyy")
trong file đính kèm ở bài 1 và ăn may làm sao nó lại ra được, em có mở code của anh ra để xem có thể thêm được không nhưng không thể làm được, nên a xem sửa giúp em với, còn dữ liệu các cột X Y M, khi copy vào historys a định dạng hết sang text cũng được ạ
- Về phần dữ liệu mới mà em muốn nối tiếp sang sheet history tức là nếu phần dữ liệu từ cột A đến Y có ở sheet summary mà không có ở sheet historys thì lấy phần dữ liệu không có từ cột A đến Y đó chuyển sang thêm nối tiếp vào sheet historys, hiện tại thì em thấy nó chỉ copy nối được một số cột cho nên em mới hiểu câu hỏi của anh để giải thích thế nào là dữ liệu mới, em sợ nói không đúng lại bị mắng.
 
Upvote 0
Dạ là do em lấy code từ trên diễn đàn giaiphapexcel để lắp ghép thôi ạ, chứ em hoàn toàn không có khả năng code.
nên mới thành ra như vậy, em xin trả lời từng ý của anh nhé nhé để a dễ hiểu

" từ cột Z đến AQ là cập nhật từ các sheet khác," thì cập nhật theo điều kiện nào? -> theo điều kiện lấy cột A sheet Historys làm tham số.

'' Điều cập nhật là nếu tìm thấy dữ liệu tại cột A sheet Historys ở cột nào? của các sheet còn lại (MATER_ITEM, SHIPOUT, ORDER_SCAN, BY_DATE, KITTING, MATERIAL_SHORTAGE, PRINT_STAGE, CUT_STAGE, BCNK, SOL_CANCEL)
-> SHIPOUT(Cột A), ORDER_SCAN(cột A), BY_DATE(Cột A), KITTING(Cột A), MATERIAL_SHORTAGE(Cột B), PRINT_STAGE(Cột A), CUT_STAGE(Cột A), BCNK(Cột B), SOL_CANCEL(Cột A),


" là vùng nào?
-Nếu tìm thấy cột A sheet historys ở cột A bên sheet SHIPOUT thì lấy dữ liệu ở các cột B, C trả về vùng
Z, AA sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet ORDER_SCAN thì lấy dữ liệu ở cột C trả về vùng
AB sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet BY_DATE thì lấy dữ liệu ở cột B trả về vùng
AP sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet KITTING thì lấy dữ liệu ở cột B trả về vùng
AC sheet historys


-Nếu tìm thấy cột A sheet historys ở cột B bên sheet MATERIAL_SHORTAGE thì lấy dữ liệu ở cột N trả về vùng
AD sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet PRINT_STAGE thì lấy dữ liệu ở các cột B C D trả về vùng
AE, AF, AG sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet CUT_STAGE thì lấy dữ liệu ở các cột B C D trả về vùng
AH, AI, AJ sheet historys


-Nếu tìm thấy cột A sheet historys ở cột B bên sheet BCNK thì lấy dữ liệu ở các cột C D trả về vùng
AK, AL sheet historys


-Nếu tìm thấy cột A sheet historys ở cột A bên sheet SOL_CANCEL thì lấy dữ liệu ở cột B trả về vùng
AQ sheet historys


riêng sheet MATER_ITEM thì điều kiện khác một chút là nếu tìm thấy cột L sheet historys ở cột B bên sheet MATER_ITEM thì lấy dữ liệu ở các cột E F G trả về vùng AM, AN, AO sheet historys

các cột B,C,D,E và S của sheet historys sẽ được cập nhật từ sheet summary dựa theo điều kiện cả 2 sheet đều có cột A làm khóa chính, tức là nếu tìm thấy cột A của sheet historys bên cột A của sheet summary thì lấy dữ liệu của các cột B,C,D,E và S cập nhật sang các cột B,C,D,E và S của sheet historys.
Thêm một cách nữa cho bạn rộng đường lựa chọn.
Hãy vào Sh History(Thu) và nhấn nút để xem và kiểm tra kết quả.
Bạn hãy thử thêm dữ liệu của Sh SUMMARY và kiểm tra lại trên sh History. các sh khác cũng vậy. Tôi đã mất cả một ngày để làm chức năng này theo yêu cầu "
....mỗi lần các sheet khác thay đổi nội dung thì các vùng bên sheet History cũng được cập nhật theo
và nếu dữ liệu ở các sheet summary hay các sheet khác bị mất thì dữ liệu trong sheet historys không bị mất đi...."
này của bạn.
nhớ là kiểm tra thật kỹ. Tôi cũng chưa kiểm tra kỹ được đâu.
Các Sub History cũ của bạn tôi đã xóa bỏ và viết lại (nó chỉ cần đến khi nào bạn muốn sử dụng để Refersh toàn bộ-Dễ kiểm tra)
Xem file đính kèm.
Ngóng chờ hồi âm
 

File đính kèm

  • History.xlsb
    2.8 MB · Đọc: 14
Upvote 0
Em cảm ơn anh nhé,
về phần định dạng ngày tháng thì đúng là nó đang khác định dạng, trước em cũng bị rồi và em phải đưa thêm
Sarr(k, 3) = Format(DR(i, 3), "dd/mmm/yyyy")
Sarr(k, 4) = Format(DR(i, 4), "dd/mmm/yyyy")
Sarr(k, 5) = Format(DR(i, 5), "dd/mmm/yyyy")
Tôi không bao giờ chấp nhận kiểu Format như thế. Đâu có phải trên máy nào cũng dùng "/" và ngày trước tháng. Vd. ở máy tôi là 20.12.2021. Nếu nói về ngày tháng chuẩn thì tôi khuyên là chuyển ngay dữ liệu gốc về chuẩn. Thế thôi. vd. cột SUMMARY!C. Có thể cho là dữ liệu từ cùng một nguồn nên cùng dạng. Nhìn có 23/11/2021 nên có thể cho là dữ liệu kiểu dd/MM/yyyy. Vậy thì để chuyển C về chuẩn thì: chọn tất cả dữ liệu cột C -> thẻ Data -> Text to Columns -> Next -> Next -> chọn Date -> bên cạnh chọn DMY -> nhấn Finish.
còn dữ liệu các cột X Y M, khi copy vào historys a định dạng hết sang text cũng được ạ
Vấn đề không ở đó. Tôi đã viết là dữ liệu không ăn nhằm gì với dạng cột Y. Đang có một loạt kiểu ATO-42835577, tự dưng nhẩy ra 42963005
- Về phần dữ liệu mới mà em muốn nối tiếp sang sheet history tức là nếu phần dữ liệu từ cột A đến Y có ở sheet summary mà không có ở sheet historys thì lấy phần dữ liệu không có từ cột A đến Y đó chuyển sang thêm nối tiếp vào sheet historys,
Tôi viết rất rõ là code tôi viết cho giả thiết nhất định. Trong giả thiết đó tôi chấp nhận một khái niệm "dữ liệu mới" cụ thể. Bạn đọc bài #7 thì thấy tôi nêu ra 2 khái niệm "dữ liệu mới". Khi viết code tôi giả thiết "dữ liệu mới" là khái niệm b. trong bài #7, tức cứ không tồn tại SOL (A) là "dư liệu mới". Còn nếu bạn lại muốn khái niệm a. ̣(chuỗi tổng từ A tới Y) thì khẳng định rõ, tôi sẽ sửa vào buổi tối. Chỗ tôi ở múi giờ sau VN 6 tiếng. Tức 7 giờ VN là 1 giờ đêm ở chỗ tôi.
 
Upvote 0
Thêm một cách nữa cho bạn rộng đường lựa chọn.
Hãy vào Sh History(Thu) và nhấn nút để xem và kiểm tra kết quả.
Bạn hãy thử thêm dữ liệu của Sh SUMMARY và kiểm tra lại trên sh History. các sh khác cũng vậy. Tôi đã mất cả một ngày để làm chức năng này theo yêu cầu "
....mỗi lần các sheet khác thay đổi nội dung thì các vùng bên sheet History cũng được cập nhật theo
và nếu dữ liệu ở các sheet summary hay các sheet khác bị mất thì dữ liệu trong sheet historys không bị mất đi...."
này của bạn.
nhớ là kiểm tra thật kỹ. Tôi cũng chưa kiểm tra kỹ được đâu.
Các Sub History cũ của bạn tôi đã xóa bỏ và viết lại (nó chỉ cần đến khi nào bạn muốn sử dụng để Refersh toàn bộ-Dễ kiểm tra)
Xem file đính kèm.
Ngóng chờ hồi âm
em cám ơn anh đã bỏ thời gian giúp đỡ
File của anh lúc tải về enable macro hiển thị lỗi, sau đó chạy code thì không lấy được dữ liệu mới từ sheet summary vào sheet historys, chỉ cập nhật được dữ liệu của các vùng,
và định dạng thời gian bị sai với sheet summary, em biết là định dạng gốc có vấn đề nhưng trước đó
em có lấy được đoạn code
Sarr(k, 3) = Format(DR(i, 3), "dd/mmm/yyyy")
Sarr(k, 4) = Format(DR(i, 4), "dd/mmm/yyyy")
Sarr(k, 5) = Format(DR(i, 5), "dd/mmm/yyyy")
may mắn sao nó lại chạy được a có thể xem file ở bài viết một còn giờ thì em không biết chỉnh thế nào nữa.
a sửa giúp em nhé

Capture.PNG
Bài đã được tự động gộp:

Tôi không bao giờ chấp nhận kiểu Format như thế. Đâu có phải trên máy nào cũng dùng "/" và ngày trước tháng. Vd. ở máy tôi là 20.12.2021. Nếu nói về ngày tháng chuẩn thì tôi khuyên là chuyển ngay dữ liệu gốc về chuẩn. Thế thôi. vd. cột SUMMARY!C. Có thể cho là dữ liệu từ cùng một nguồn nên cùng dạng. Nhìn có 23/11/2021 nên có thể cho là dữ liệu kiểu dd/MM/yyyy. Vậy thì để chuyển C về chuẩn thì: chọn tất cả dữ liệu cột C -> thẻ Data -> Text to Columns -> Next -> Next -> chọn Date -> bên cạnh chọn DMY -> nhấn Finish.

Vấn đề không ở đó. Tôi đã viết là dữ liệu không ăn nhằm gì với dạng cột Y. Đang có một loạt kiểu ATO-42835577, tự dưng nhẩy ra 42963005

Tôi viết rất rõ là code tôi viết cho giả thiết nhất định. Trong giả thiết đó tôi chấp nhận một khái niệm "dữ liệu mới" cụ thể. Bạn đọc bài #7 thì thấy tôi nêu ra 2 khái niệm "dữ liệu mới". Khi viết code tôi giả thiết "dữ liệu mới" là khái niệm b. trong bài #7, tức cứ không tồn tại SOL (A) là "dư liệu mới". Còn nếu bạn lại muốn khái niệm a. ̣(chuỗi tổng từ A tới Y) thì khẳng định rõ, tôi sẽ sửa vào buổi tối. Chỗ tôi ở múi giờ sau VN 6 tiếng. Tức 7 giờ VN là 1 giờ đêm ở chỗ tôi.
thẻ Data -> Text to Columns -> Next -> Next -> chọn Date -> bên cạnh chọn DMY -> nhấn Finish.
Dạ cách này em đã thử rồi ạ nhưng mà nó chỉ được một thời gian sau đó định dạng đó lại trở về lúc ban đầu
vì định dạng gốc là sheet FRU được truy vấn từ hệ thống oracle nên là với em nó rất phức tạp khâu lấy dữ liệu thì do người nước ngoài chạy truy vấn, cho nên a cứ sửa giúp em nếu được như file ở bài một thì tốt quá, còn việc chạy trên máy khác thì không lo ạ vì chỉ lưu hành để xem nội bộ, các máy nội bộ đều xem được ngày tháng như file em đề cập ở bài một.

Vấn đề không ở đó. Tôi đã viết là dữ liệu không ăn nhằm gì với dạng cột Y. Đang có một loạt kiểu ATO-42835577, tự dưng nhẩy ra 42963005 -> cái này cũng không sao anh nhé.

Còn nếu bạn lại muốn khái niệm a. ̣(chuỗi tổng từ A tới Y) thì khẳng định rõ, tôi sẽ sửa vào buổi tối. Chỗ tôi ở múi giờ sau VN 6 tiếng. Tức 7 giờ VN là 1 giờ đêm ở chỗ tôi. -> em xác nhận là lấy từ A đến Y a nhé. dạ em hiểu lệch mũi giờ khiến a vất vả nên khi nào a rảnh a sửa giúp em cũng được ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ cách này em đã thử rồi ạ nhưng mà nó chỉ được một thời gian sau đó định dạng đó lại trở về lúc ban đầu
vì định dạng gốc là sheet FRU được truy vấn từ hệ thống oracle nên là với em nó rất phức tạp khâu lấy dữ liệu thì do người nước ngoài chạy truy vấn, cho nên a cứ sửa giúp em nếu được như file ở bài một thì tốt quá, còn việc chạy trên máy khác thì không lo ạ vì chỉ lưu hành để xem nội bộ, các máy nội bộ đều xem được ngày tháng như file em đề cập ở bài một.
Tôi đã nói rồi, tôi không xem code cũ của bạn, tôi không sửa theo ý bạn.

Thao tác mà tôi hướng dẫn chỉ mất chưa tới 1 phút. Cứ cho là thỉnh thoảng (vài ngày?) lại phải mất 1 phút thì chả là gì cả. Nếu cần thì tôi sẽ viết code để đưa C, D, E về chuẩn trước khi duyệt SUMMARY chứ không phải kiểu chữa cháy bằng Format. Còn các cột X, Y, M thì bạn phải chỉnh lại.

Về vấn đề "dữ liệu mới" bạn phải khẳng ̣định rõ lại là theo a. ở bài #7 hay không. Lúc đó tôi mới sửa lại code.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi đã nói rồi, tôi không xem code cũ của bạn, tôi không sửa theo ý bạn.

Thao tác mà tôi hướng dẫn chỉ mất chưa tới 1 phút. Cứ cho là thỉnh thoảng (vài ngày?) lại phải mất 1 phút thì chả là gì cả. Nếu cần thì tôi sẽ viết code để đưa C, D, E về chuẩn trước khi duyệt SUMMARY chứ không phải kiểu chữa cháy bằng Format. Còn các cột X, Y, M thì bạn phải chỉnh lại.

Về vấn đề "dữ liệu mới" bạn phải khẳng ̣định rõ lại là theo a. ở bài #7 hay không. Lúc đó tôi mới sửa lại code.
a. hoặc mới là A & B & ... & Z mới
b. hoặc mới là A mới

Phương án A a nhé. a sửa Z thành Y giúp em ạ

Thao tác mà tôi hướng dẫn chỉ mất chưa tới 1 phút. Cứ cho là thỉnh thoảng (vài ngày?) lại phải mất 1 phút thì chả là gì cả. Nếu cần thì tôi sẽ viết code để đưa C, D, E về chuẩn trước khi duyệt SUMMARY chứ không phải kiểu chữa cháy bằng Format.
-> Dạ đúng là chỉ mất 1 vài phút, nhưng mà vấn đề em gặp phải không dừng lại ở đó, cứ 5 phút sẽ có hệ thống khác tự động lấy file này lên để tính toán, nếu Text to Columns thì việc này lặp đi lặp lại chưa kể là lúc về nhà rồi nhưng hệ thống vẫn hoạt động, nếu ngày khác nhau thì em cũng không biết phải làm sao nữa,
chuyển về định dạng chuẩn trước khi duyệt thì cũng rủi ro cao vì ngày có 2 chữ số tháng cũng có 2 chữ số, hệ thống nó cũng không biết được đâu là ngày đâu là tháng,nó chỉ nhận dạng được tháng qua "MMM" vì dụ là Dec hay Oct ... cho nên em mới phải làm format như vậy, nếu không vướng hệ thống em cũng cặm cụi vlookup chứ không dám đăng bài lên đây ạ
 
Upvote 0
-> Dạ đúng là chỉ mất 1 vài phút, nhưng mà vấn đề em gặp phải không dừng lại ở đó, cứ 5 phút sẽ có hệ thống khác tự động lấy file này lên để tính toán, nếu Text to Columns thì việc này lặp đi lặp lại chưa kể là lúc về nhà rồi nhưng hệ thống vẫn hoạt động, nếu ngày khác nhau thì em cũng không biết phải làm sao nữa,
chuyển về định dạng chuẩn trước khi duyệt thì cũng rủi ro cao vì ngày có 2 chữ số tháng cũng có 2 chữ số, hệ thống nó cũng không biết được đâu là ngày đâu là tháng,nó chỉ nhận dạng được tháng qua "MMM" vì dụ là Dec hay Oct ... cho nên em mới phải làm format như vậy, nếu không vướng hệ thống em cũng cặm cụi vlookup chứ không dám đăng bài lên đây ạ
Tôi không hiểu bạn nói gì. Ngày tháng chuẩn chỉ khác ngày tháng nhái của bạn ở chỗ nó là hàng xịn. Còn chuyện bạn định dạng thế nào thì đâu có liên quan. Vd. có ngày tháng xin 20.12.2021 có thể định dạng là vd. "20 Dec 2021", hoặc "20 tháng Mười Hai 2021" hay "ngày 20 lành tháng 12 tốt năm 2021 xịn"
Ngày tháng chuẩn và định dạng là 2 vấn đề khác nhau. Ở đâu ra cái hệ thống chấp nhậ̣n hàng nhái và từ chối hàng xin vậy?
 
Upvote 0
Tôi không hiểu bạn nói gì. Ngày tháng chuẩn chỉ khác ngày tháng nhái của bạn ở chỗ nó là hàng xịn. Còn chuyện bạn định dạng thế nào thì đâu có liên quan. Vd. có ngày tháng xin 20.12.2021 có thể định dạng là vd. "20 Dec 2021", hoặc "20 tháng Mười Hai 2021" hay "20 ngày lành tháng 12 tốt năm 2021 xịn"
Ngày tháng chuẩn và định dạng là 2 vấ đề khác nhau. Ở đâu ra cái hệ thống chấp nhậ̣n hàng nhái và từ chối hàng xin vậy?
Hệ thống từ năm 1995 anh ạ, không được nâng cấp và họ cứ duy trì vậy, nhưng đây ko phải do hệ thống mà do dữ liệu gốc như a đã phản ảnh là không đạt chuẩn, em cũng không biết diễn tả làm sao nữa càng nói khiến a cũng sẽ khó hiểu, em từ một kế toán rồi khi vào làm với hệ thống này trở nên không bình thường nữa
 
Upvote 0
em cám ơn anh đã bỏ thời gian giúp đỡ
File của anh lúc tải về enable macro hiển thị lỗi, sau đó chạy code thì không lấy được dữ liệu mới từ sheet summary vào sheet historys, chỉ cập nhật được dữ liệu của các vùng,
và định dạng thời gian bị sai với sheet summary, em biết là định dạng gốc có vấn đề nhưng trước đó
em có lấy được đoạn code
Sarr(k, 3) = Format(DR(i, 3), "dd/mmm/yyyy")
Sarr(k, 4) = Format(DR(i, 4), "dd/mmm/yyyy")
Sarr(k, 5) = Format(DR(i, 5), "dd/mmm/yyyy")
may mắn sao nó lại chạy được a có thể xem file ở bài viết một còn giờ thì em không biết chỉnh thế nào nữa.
a sửa giúp em nhé

View attachment 270535
Lỗi này có thể là do tôi đã đặt code khi mở workbook sẽ addDic, hoặc có thể không tương thích với máy bạn. Chứ ở máy tôi nó chạy bình thường mà, không muốn nói là rất nhanh nữa là đằng khác. Bạn thử tìm hiểu xem lỗi này là gì thì có cách giải quyết thôi. google dịch thành Phương thức 'Trang tính' của đối tượng '_Global' bị lỗi.
Bạn end nó đi và mở VBE ra chạy code history xem thế nào? nếu không thì bạn chạy modul napdic trước sau đó chạy modul Refresh All xem có ra không?
 
Upvote 0
Hệ thống từ năm 1995 anh ạ, không được nâng cấp và họ cứ duy trì vậy, nhưng đây ko phải do hệ thống mà do dữ liệu gốc như a đã phản ảnh là không đạt chuẩn, em cũng không biết diễn tả làm sao nữa càng nói khiến a cũng sẽ khó hiểu, em từ một kế toán rồi khi vào làm với hệ thống này trở nên không bình thường nữa
Thì tôi cũng viết rồi. Đưa về ngày tháng xịn thôi, còn định dạng như nào thì bạn tự định dạng từng cột sẵn thôi. Bạn viện lý do này nọ nhưng tôi có câu hỏi. Trong SUMMARY các cột C, D, E chứa ngày tháng không chuẩn, trong khi các cột I, J, K, Z, AB, AC, AE, AK, AL cũng chứa ngày tháng nhưng là ngày tháng xịn. Bạn lấy lý do là hệ thống không chấp nhận ngày tháng chuẩn? Thế thì sao hệ thống không gào lên khi mà I, J, K, Z, AB, AC, AE, AK, AL đều có ngày tháng chuẩn?
 
Upvote 0
Lỗi này có thể là do tôi đã đặt code khi mở workbook sẽ addDic, hoặc có thể không tương thích với máy bạn. Chứ ở máy tôi nó chạy bình thường mà, không muốn nói là rất nhanh nữa là đằng khác. Bạn thử tìm hiểu xem lỗi này là gì thì có cách giải quyết thôi. google dịch thành Phương thức 'Trang tính' của đối tượng '_Global' bị lỗi.
Bạn end nó đi và mở VBE ra chạy code history xem thế nào? nếu không thì bạn chạy modul napdic trước sau đó chạy modul Refresh All xem có ra không?
Em chạy được rồi a nhé, vậy mỗi lần chạy
Thì tôi cũng viết rồi. Đưa về ngày tháng xịn thôi, còn định dạng như nào thì bạn tự định dạng từng cột sẵn thôi. Bạn viện lý do này nọ nhưng tôi có câu hỏi. Trong SUMMARY các cột C, D, E chứa ngày tháng không chuẩn, trong khi các cột I, J, K, Z, AB, AC, AE, AK, AL cũng chứa ngày tháng nhưng là ngày tháng xịn. Bạn lấy lý do là hệ thống không chấp nhận ngày tháng chuẩn? Thế thì sao hệ thống không gào lên khi mà I, J, K, Z, AB, AC, AE, AK, AL đều có ngày tháng chuẩn?
Dạ các cột mà a nói có ngày tháng chuẩn là toàn bộ được nhập bằng tay từ file excel sau đó import vào hệ thống, còn C D E là định dạng không chuẩn được cắt xén từ nhiều nguồn khác nhau dẫn đến như vậy nên em phải dùng tạm format để chuyển đổi thành dạng tháng MMM để phân biệt với ngày thì hệ thống nó mới không báo lỗi
Bài đã được tự động gộp:

Lỗi này có thể là do tôi đã đặt code khi mở workbook sẽ addDic, hoặc có thể không tương thích với máy bạn. Chứ ở máy tôi nó chạy bình thường mà, không muốn nói là rất nhanh nữa là đằng khác. Bạn thử tìm hiểu xem lỗi này là gì thì có cách giải quyết thôi. google dịch thành Phương thức 'Trang tính' của đối tượng '_Global' bị lỗi.
Bạn end nó đi và mở VBE ra chạy code history xem thế nào? nếu không thì bạn chạy modul napdic trước sau đó chạy modul Refresh All xem có ra không?
Dạ em vừa chạy được a nhé, vậy sau này phải chạy module napdic trước phải không anh
 
Upvote 0
Dạ em vừa chạy được a nhé, vậy sau này phải chạy module napdic trước phải không anh
Chúc mừng bạn.

Nhưng bạn đã mô tả cách làm sai hoàn toàn. Từ cách mô tả đại loại là: "nếu dữ liệu SUMMARY đã tồn tại thì làm mới các cột B,C,D,E và S của sheet historys. Còn nếu là dữ liệu mới thì copy toàn bộ dòng A:Y sang HISTORYS". Từ mô tả trên có 2 kết luận:

1. Nếu có khái niệm "dữ liệu của dòng nào đó của SUMMARY ĐÃ TỒN TẠI bên HISTORYS" thì có nghĩa là trước khi chạy code thì HISTORYS có thể đã có dữ liệu rồi. Trong khi đó tập tin HISTIRYS(Thu) trắng tinh.

2. Code đơn giản chỉ copy SUMMARY!A2:Y... sang HISTORYS!A2:Y... chứ có bận tâm gì tới cái gọi là "dữ liệu mới", "dữ liệu cũ" đâu nhỉ. Có bận tâm làm mới các cột B,C,D,E và S của sheet historys đâu nhỉ. Có phải bận tâm ... đâu nhỉ. Hay là tôi sơ ý không nhìn thấy?

Tôi không hiểu ý nên hỏi ở bài 4 và các bài tiếp theo. Nếu cách làm như ở trên thì chỉ cần mô tả 1 câu: "Khi duyệt SUMMARY thì bê hết dữ liệu của nó, cột từ A đến Y rồi ghi đè lên HISTORYS bắt đầu từ A2". Đơn giản thế thôi chứ "dữ liệu mới", "dữ liệu cũ" từ A đến Y, làm mới các cột B,C,D,E và S của sheet historys ... để làm gì. Mất bao nhiêu thời gian
 
Upvote 0
Em chạy được rồi a nhé, vậy mỗi lần chạy.
Dạ em vừa chạy được a nhé, vậy sau này phải chạy module napdic trước phải không anh
Tôi đã code NapDic (Sub AddDic) ở sự kiện open Workbook rồi, và như vậy không biết có đúng không. Bạn thử thì biết ngay thôi mà. Tắt bỏ Workbook rồi mở lại sauddos vào Sh History (thu) và nhấn nút xem nó có Import không? nếu lỗi thì chụp cái lỗi đó gửi lên.
 
Upvote 0
Web KT

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

Back
Top Bottom