Giả sử có một nhóm cùng làm việc với một workbook. Mỗi người làm xong công việc của mình thì save và gửi cho người khác trong nhóm. Người nhận file cập nhật rồi gửi tiếp hoặc gửi trả lại cho người trong nhóm bằng email. Trong trường hợp có mạng LAN, có thể sử dụng một folder chung để lưu bản sao mới cập nhật trên đó.
Vấn đề là làm sao có thể sử dụng đúng phiên bản mới nhất?Có nhiều cách làm, một cách phổ biến là mỗi lần cập nhật xong, đổi tên file, trong tên file ghi rõ tên người, thời gian cập nhật rồi gửi email cho người khác hoặc save vào folder chung… Cách làm này tạo ra rất nhiều rác và dễ lẫn lộn, không an toàn và không cho phép mọi người làm công việc một cách đồng thời.
Đồng bộ dữ liệu Excel khi làm việc trên LAN
Để đơn giản, xét nhóm gồm 2 người: A sử dụng Sheet1, còn B sử dụng Sheet2. (Việc phát triển thêm cho nhóm nhiều hơn 2 người, nhiều hơn 2 sheet là tự nhiên).
Cách đồng bộ dữ liệu như sau (xem các file đính kèm: synDNT-A.xls, synDNT-B.xls, synDNT.mdb):
Hai workbook giống hệt nhau SynDNT-A.xls (W1) và SynDNT-B.xls (W2) đều có Sheet1 và Sheet2 tương ứng giống nhau. Ký hiệu Sheet1 của W1 là SH11, Sheet2 của W1 là SH12; Sheet1 của W2 là SH21, Sheet2 của W2 là SH22.
File SynDNT.mdb có 2 table: Sheet1 (T1) và Sheet2 (T2). (Kiểu dữ liệu của tất cả các field là Memo và Allow Zero Length = Yes).
Dữ liệu các sheet của W1 và W2 trao đổi với nhau theo sơ đổ SH11 à T1 à SH21, từ SH22 à T2 à SH12
Cần lưu ý là FormulaR1C1 chứ không phải là Value được trao đổi
RS.Fields(j - 1) = SH.Cells.Item(i, j).FormulaR1C1
SH.Cells.Item(i, j + 1).FormulaR1C1 = CStr(RS.Fields(j))
Trong trường hợp người nhận chỉ quan tâm / chỉ được quyền nhận Value thì đổi dòng thứ nhất thành
RS.Fields(j - 1) = SH.Cells.Item(i, j)
A làm việc với W1 thực hiện gọi các lệnh:
LetMDB Sheet1, "synDNT.mdb", "Sheet1" ‘SH11 à T1
GetMDB Sheet2, "synDNT.mdb", "Sheet2" ‘T2 à SH12
Còn B làm việc với W2 gọi các lệnh:
LetMDB Sheet2, "synDNT.mdb", "Sheet2" ‘SH22 à T2
GetMDB Sheet1, "synDNT.mdb", "Sheet1" ‘T1 à SH21
Sử dụng chương trình mẫu
Lưu file synDNT-A.xls vào PC của A, synDNT-B.xls vào PC của B, synDNT.mdb vào Server. Khai báo đường dẫn trong modMDB của 2 file excel nói trên - Hiện đang khai báo là “NULL” cần khai báo lại cho đúng với Path chứa synDNT.mdb trên Server. Số cột đang khai báo là 50, số dòng là 1000, có thể khai báo lại số cột và số dòng phù hợp với nhu cầu sử dụng, với điều kiện số cột ≤ 255 và số dòng ≤ 65536. Số lượng các field trong các table của synDNT.mdb cần phải khai báo tương ứng.
(Để chạy thử chương trình mẫu, lưu tất cả các file trên vào cùng một folder, không sửa đổi gì)
Bây giờ A và B cứ việc làm việc trên workbook của mình. A nhấn Ctrl-a, B nhấn Ctrl-b là có ngay dữ liệu mới nhất do người kia cập nhật.
Mở rộng chương trình
Giả sử có N người dùng chung một workboock có N sheet.
Tạo N bản sao W1, W2, …, WN. Trong module modMacro của WJ của người thứ J (J = 1, 2, …, N) viết N lệnh sau:
LetMDB SheetJ, “synDNT.mdb”, “SheetJ”
GetMDB SheetK, “synDNT.mdb”, “SheetK” (K = 1, 2, …, J-1, J+1, …, N) ‘N-1 lệnh
Ở đây chúng tôi giả thiết mỗi người cập nhật một sheet, nếu nhiều hơn thì tăng LetMDB và giảm GetMDB tương ứng.
Mở rộng ứng dụng
Trong trường hợp cần tập hợp dữ liệu từ nhiều nguồn (để làm báo cáo) thì quá trình cũng tương tự trên. Người báo cáo dùng LetMDB gửi dữ liệu về một hoặc một số file *.mdb trên Server. Người tổng hợp báo cáo có thể sử dụng Excel (dùng GetMDB để lấy dữ liệu) hoặc bất kỳ chương trình nào khác có khả năng đọc được *.mdb.
Jack NT - maildnt@gmail.com