Đồng thời có thể nhập dữ liệu từ hai PC khác nhau lên một sheet (Excel) hay không?

Liên hệ QC

handung107

Thành viên gắn bó
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,630
Được thích
17,440
Nghề nghiệp
Bác sĩ
Phan Tuấn Nam​

Đồng thời có thể nhập dữ liệu từ hai PC khác nhau lên một sheet (Excel) hay không?
Đó là câu hỏi mà "sếp" hỏi mình hôm qua trong một buổi tham gia quyên góp từ thiện, để đánh dễ dàng tổng kết danh sách Mạnh Thường Quân, số tiền ủng hộ nhằm cung cấp cho Báo - Đài. Mình trả lời "Bó tay, sếp ơi!!!"
 
Được, nhưng vì Excel không được thiết kế để làm công việc như vậy nên bạn có thể phân từng vùng dữ liệu để nhập vào các máy trong cùng hệ thống mạng, td : ở máy 1 bạn có thể copy một phần Workbook và Paste vào máy chung. Khi Paste, bạn chọn Paste Special/ Paste Link. Ở máy 2, bạn chọn các phần còn lại của Workbook và cũng làm tương tự như ở máy 1, bạn chép vào máy chung. Khi đó, nếu máy 1 và máy 2 cùng nhập dữ liệu vào thì ở máy chung sẽ tự động cập nhật phần dữ liệu.
Trường hợp bạn muốn cả 2 máy 1 và 2 đều cùng nhập chung khối dữ liệu vào máy chung, bạn phải xác lập thêm nhiều thông tin chia xẻ khác ở Workbook nguồn, và theo tôi, phức tạp hơn bạn làm cách trên nhiều
 
ContraiXu Dao - www.webketoan.com

-Sau khi chọn : Tools\Share Workbook
20ii.jpg

-Bảng này tôi đánh ngay máy tôi đang ngồi
10sv.png

-Phân dưới do bạn tôi đánh, tôi chỉ có việc Save lại là OK
19ju.png
 
Thế còn việc bảo mật của CSDL ? Và nếu không chỉ có 2 máy với nhau mà là nhiều hơn, 2 người cùng nhập 1 lúc vào cùng 1 Cell, bạn sẽ phân quyền cho ai ? Và xung đột dữ liệu xảy ra thì bạn sẽ lựa chọn ai ? Tất cả những việc đó bạn phải thiết lập thêm thông số, riêng tôi, tôi chọn cách nhẹ nhàng nhất là ai biết việc nấy, tôi phân cho máy nào khu vực nào, thì những phần khác không thuộc phạm vi chỉ được đọc, thế thôi.
 
Lê Văn Duyệt Post :

Tôi cũng đã có sử dụng chức năng này, nhưng đôi khi rất nguy hiểm như ý kiến của handung107. Nếu hai người sử dụng cùng lúc lưu lại thì...lại càng nguy hiểm. Tôi đã bị vấn đề này nhiều lần, nhiều khi người sử dụng không hiểu sao làm mất luôn cả code !!!
 
Không phải vậy đâu OverAc à, việc mất code hoàn toàn có thể xảy ra khi nhiều người cùng nhập vào chung một CSDL mà không phân quyền, như chị đã nói ở trên. Nếu cả 2 người cùng nhập vào chung 1 Cell thì việc mất CSDL là xảy ra thôi, vì người này nhập đè lên người trước.... Nên rất cần nhiều giải pháp đưa ra là phải thiết lập ưu tiên, nếu có xung đột dữ liệu sẽ được thông báo (cả 2 người cùng lúc nhập vào 1 Cell nhưng với 2 dữ liệu khác nhau), và ai là người được ưu tiên save dữ liệu đó lên máy chung, hoặc chẳng ai được save cả mà dữ liệu cứ nằm đó và user của máy chung sẽ lựa chọn...Nói chung là chị không khoái cái kiểu này nên không nhớ hết được mặc dù đã từng thử rồi.
Nếu OverAC muốn có một người chuyện nhập dữ liệu đầu vào và 1 người chuyên nhập dữ liệu đầu ra cho 1 File KT thì vấn đề sẽ rất đơn giản. Ở máy 1 chỉ có các Sheet dành cho dữ liệu đầu vào. Ở máy 2 chỉ có các Sheet nhập dữ liệu đầu ra. Ở máy chung, ta copy các Sheet của máy 1 và máy 2 rồi dùng chức năng Edit/Paste Link. Khi nhập dữ liệu từ máy 1 và máy 2, máy chung sẽ tự động cập nhật dữ liệu mà không gặp xung đột dữ liệu cũng như người này khi nhập thì đè lên dữ liệu người trước đã nhập rồi. Còn nếu muốn nhập chung trên cùng 1 Sheet ta cũng nên phân vùng cho từng máy như trên
 
Tuanktcdcn Post :

Để cập nhật dữ liệu trên một Sheet ở các máy tính là được như chúng ta đã nêu trên, bạn nên thay đổi thông số: Share Workbook->Advanced chọn "Ask me which changes win".
Nếu chúng ta muốn dùng chức năng Share của EXCEL thì phải có sự phân quyền ai dùng Sheet1 và ai dùng Sheet2....chứ không nên để sự ngẫu nhiên. Người dùng nên tuân thủ chức năng nhiệm vụ được phân thì sẽ tốt hơn là cứ đụng mỗi nơi một ít.
Trường hợp chúng ta cần biết dữ liệu từ các máy thường xuyên cập nhật thì phải Save thường xuyên, với file khoảng vài trăm kb thì không vấn đề nhưng từ 1Mb trở lên thì không ổn vì tốc độ rất chậm.
Để làm tốt việc trên chúng ta cần phải dùng kỹ thuật lập trình ADO, DAO, ... Tức là việc vào dữ liệu phải gián tiếp thông qua một lệnh Insert, Addnew, Edit, và kết thúc một lệnh Update.... Với phương pháp này chúng ta bóc tách Database với mã VBA nên tốc độ rất nhanh. Nếu chúng ta dùng VBA chung với Workbook, khi cất EXCEL vừa phải cất các Worksheet lại vừa cất lại VBA nên tốc độ rất chậm (nếu Share qua mạng đôi khi còn làm hỏng mã VBA).
 
Chia sẻ dữ liệu trên các máy!

ADO cho phép đọc và ghi dữ liệu trên tất cả các file XLS,MDB,DBF,...

Tôi xin đưa ra một ví dụ nhỏ về chia sẻ dữ liệu trên các máy.

1-Copy file "Phieuchi.XLS" vào các máy (Clients)
2-Copy file "Chungtu.XLS" vào 1 máy chủ (tạm gọi là Server). Share thư mục chứa file "Chungtu.XLS" (giả sử là PHIEUCHI, Share chế độ Full).
Bây giờ ở các máy chúng ta mở file "Phieuchi.XLS" chọn "Enable Macros". Bạn mở Sheet "Setup" để lấy lại địa chỉ và tên file "Chungtu.XLS" (nếu muốn truyền trên mạng chỉ tới file "Chungtu.XLS" trong thu mục đã Share ở SERVER sau khi chọn "OK" đường dẫn thành \\Server\PHIEUCHI\Chungtu.XLS).
Trong Sheet "Phieuchi", cứ mỗi lần bạn chọn nút "Nhapso", "Phieuchi" sẽ ghi dữ liệu lên file "Chungtu.XLS" bạn không cần phải chọn "Save" nữa.
Bạn chú ý rằng file "Chungtu.XLS" không được mở bởi Excel.
 
Lê Văn Duyệt Post :

Nhưng để lập trình với ADO thì bạn cần phải sử lý nhiều vấn đề lắm. Chắc chắn bạn Tuanktcdcn rành vấn đề này, bạn có thể chia sẻ không !? Dùng Excel chỉ là nơi ta đưa dữ liệu ra mà thôi !
Để biết thêm về ADO bạn có thể vào trang web www.vovisoft.com
Còn về một số module Visual Basic bạn có thể tìm kiếm trên internet !
Xin giới thiệu với các bạn Class Module adoUtils trên trang web http://www.freevbcode.com/
 
Giải pháp nhập xuất dữ liệu gián tiếp

--------------------------------------------------------------------------------

Trong Excel việc nhập dữ liệu phải vào trực tiếp tại bảng biểu, việc xuất cũng phải đến trực tiếp Seet cần in rồi mới ra lệnh in được. Nay các Bác có cách nào để khi mở 1 file ra thì có một giao diện quản lý việc nhập xuất dữ liệu không. Chẳng hạn liên quan đến 1 đối tượng có nhiều người theo dõi các số liệu khác nhau, trước đây chúng Tôi phải mở một bảng tính ra dùng chung nay mỗi người sẽ có một thẻ trên giao diện để nhập và xuất dữ liệu. Như vậy vẫn cần có một bảng tính và một giao diện có thể là ở seet khác. Bác nào có giải pháp hay xin nêu chi tiết để chúng ta cùng xây dựng
 
Tuanktcdcn bổ sung :

Việc này dễ thôi, bạn phải lập trình VBA. Trong EFC I có gửi một "Phieuchi.zip" đó là một ví dụ mô phỏng việc truy suất dữ liệu trên mạng (LAN) bằng Excel.

P/S : Bạn nào còn File này hay Tuan có thể gửi File lại giúp.
 
Phieuchi.zip, ngày trước em có up lên nhưng lâu ngày không biết để chỗ nào, em đang tìm.
Việc truy cập dữ liệu vào môt Workbook từ nhiều máy trên Excel về cơ bản các bạn đã đưa ra giải pháp trên, như thế cũng là được (ở mức người dùng đơn giản).
Để phân biệt người này có nhập trùng vào cell của người khác không chắc chắn phải viết lệnh cho Workbook (VBA).
Tạo file trung gian *.mdb
Trong file mdb có Table "Working"
Cấu trúc của Table "Working"
Workbook-Sheet-CellAddress-FullAddress-User-...
Việc kết nối với *.MDB dùng kỹ thuật ADO để nhận được một RecordSet trỏ tới Table "Working" gọi là oWorking

Tất cả các máy phải mở nó trước hay đồng thời mở WorkbookShared
Tạo ra một Record cho mình bằng lệnh

oWorking.Addnew
oWorking.User= Application.UserName
oWorking.Update
Viết lệnh trong Workbook_SheetSelectionChange
- Đặt con trỏ vào record (dòng) mà oWorking.User= Application.UserName
Nếu thấy thì làm

If oWorking.FullAddress=Activecell.Address(External:=True) then
MsgBox oWorking.User & " đang soạn thảo ô này",,"Trùng địa chỉ"
Else
oWorking.FullAddress=Activecell.Address(External:=True)
Exit Sub
End if

Đây là cách tôi ứng dụng trong viết chương trình chơi Cờ caro bằng Excel.
Mời các bạn khác tiếp tục trao đổi thêm.
 
Lần chỉnh sửa cuối:
Chào các bác. Mình đang có vấn đề rất khó xử. sau khi đọc những chia sẻ của các bác em thấy tù mù, không hiểu dù chủ đề các bác đề cấp rơi vào đúng nhu cầu em đang cần. hiện em cần các bác nói rõ nếu có thể chi tiết hộ để em nắm ý. Em xin trình bày rõ ý của mình:
Hiện nay em đã thiết kế 1 file quản lý vấn đề tiếp nhận dịch vụ sửa chữa của cty em đơn giản. chỉ có 1 phần nhỏ là dữ liệu nhập vào ko cho điều chỉnh ( em dựa theo file của một số bác up sẵn trên diễn đàn để thực hiện những yêu cầu mình đề ra - vì em không biết gì về VBA và macro). Tuy nhiên, do lượng khách thường hay tập trung vào 1 số giờ cao điểm : ( bao gồm cả khách đến yêu cầu bảo trì máy và cả khách đến nhận máy đã được bảo trì). Do vậy mà sử dụng 1 máy nhập liệu sẽ gây ách tắc công việc. Em muốn 2 máy cùng nhập liệu trên 1 sheet tổng hợp. Với máy chứa dữ liệu thì được nhập ở tất cả các cột. Còn máy thứ 2 ( là máy ko chứa dữ liệu chỉ nhập trên file gốc đã được share) chỉ được nhập vào 2 vùng cột quy ước thôi. Em tham khảo trên mục này của các bác thì em thấy có phần share workbook trong thanh công uu5. Tuy nhiên, khi sd cho 2 máy thì yêu cầu dữ liệu không được chỉnh sửa lại chỉnh sửa được. Do vậy các bác giúp em với nhé.
Em xin cám ơn các bác trước
 
Lần chỉnh sửa cuối:
Hoàn toàn làm được bạn nhé. Mình cũng đã từng làm để 2, 3 người nhập dữ liệu kho 1 lúc mà file chỉ có trên máy mình không copy đi được. Bạn có thể xem video để tham khao nha.
[video=youtube;OIECCAJP7UA]https://www.youtube.com/watch?v=OIECCAJP7UA[/video]
 
Web KT

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

Back
Top Bottom