Bảo vệ dữ liệu đã nhập

Liên hệ QC

minhthanhnguyen

Thành viên mới
Tham gia
13/8/07
Bài viết
7
Được thích
5
Chào các bạn,
Mình đang viết 1 file Excel. Mục đích là cho các khách hàng nhập dữ liệu vào file đó. Mỗi người sẽ nhập dữ liệu vào từng ô tương ứng. Ví dụ : khách hàng A nhập vào cột A1, khách hàng B nhập vào cột A2....
Tuy nhiên mình đang muốn viết 1 macro tự động. Nghĩa là sau khi khách hàng A nhập dữ liệu vào A1 xong, thì dữ liệu trong cột A1 sẽ được bảo vệ để khách hàng B không thể xóa hoặc sửa chữa.
Các bạn có lời khuyên nào cho mình trong trường hợp này không ?
Vì mình tìm hiểu thì excel nó bảo vệ toàn bộ worksheet chứ kh bảo vệ cho từng sheet một.
Cám ơn các bạn.
 
Mình nghĩ chắc file bạn thiết kế sẽ đặt đâu đó trên mạng để nhiều người có thể mở lên và nhập liệu?

ProtectWB.jpg


Thực tế thì việc này Excel làm được, mình gợi ý bạn làm theo trình tự sau:
1. Sử dụng tính năng Allow Users to Edit Ranges... để tạo ra các vùng nhập liệu cho từng User khác nhau. (Yêu cầu LAN phải có Domain để phân quyền cho các User). Sau đó chọn Protect Sheet để bảo vệ Sheet
2. Sử dụng tính năng Share Workbook để cho phép nhiều nhiều thao tác cùng lúc trên File.

TP.

PS: File ví dụ mình phân quyền cho 3 User khác nhau trong LAN của mình (Password Range: 123456/ Password Protect Sheet: 123)
 

File đính kèm

  • PhanQuyen.xls
    10.5 KB · Đọc: 101
Lần chỉnh sửa cuối:
minhthanhnguyen đã viết:
Chào các bạn,
Mình đang viết 1 file Excel. Mục đích là cho các khách hàng nhập dữ liệu vào file đó. Mỗi người sẽ nhập dữ liệu vào từng ô tương ứng. Ví dụ : khách hàng A nhập vào cột A1, khách hàng B nhập vào cột A2....
Tuy nhiên mình đang muốn viết 1 macro tự động. Nghĩa là sau khi khách hàng A nhập dữ liệu vào A1 xong, thì dữ liệu trong cột A1 sẽ được bảo vệ để khách hàng B không thể xóa hoặc sửa chữa.
Các bạn có lời khuyên nào cho mình trong trường hợp này không ?
Vì mình tìm hiểu thì excel nó bảo vệ toàn bộ worksheet chứ kh bảo vệ cho từng sheet một.
Cám ơn các bạn.

Thường là sẽ có 3 cách để làm :
  • Dữ liệu nhập xong thì không sửa được nữa : Không phân biệt là A nhập hay B nhập, vì máy tính nhận lệnh từ bàn phím và chuột
  • Dữ liệu nhập xong thì chỉ có người quản trị và chính người nhập vào sửa được : Thêm cột User nữa, nghiệp vụ nào của người nào thì sẽ hiện lên mã của người đó. Khi đăng nhập vào file đó đều phải khai báo mã người dùng, thì khi muốn sửa excel sẽ so sánh xem nghiệp vụ đó có phải là người đang đăng nhập nhập vào hay không, hoặc người đó có phải là admin hay không. Nếu đúng thì cho sửa
  • Ai sửa cũng được, miễn là có pass : Tạo một nút nhấn, khi nào muốn sửa thì chạy nó, nhập đúng pass thì OK, còn không thì . . . thôi vậy
Đây là phương hướng để làm, còn thực tế thì cũng dài dòng lắm, bạn cố gắng tìm hiểu thêm nhé.

Thân!
 
Chào các bạn,
Cảm ơn về ý kiến của các bạn.
Đúng là file này được đặt trên mạng và cho phép người ta dùng để nhập liệu vào.
Ý kiến bảo vệ worksheet mình đã tính đến tuy nhiên có rất nhiều người sử dụng nên mình không thể cung cấp mỗi người một user và password được.
Mình đang định làm thêm 1 cái nút. Sau khi nhập xong, người ta sẽ nhấn vào nút đó và ngay sau đó toàn bộ các ô có ký tự sẽ được bảo vệ. Khi muốn sửa lại dữ liệu buộc phải nhập pass vào.
Chỉ có điều cái macro protect này mình chưa biết phải làm như thế nào cả.
 
Cho minh hoi cac ban la trong excel phan macro co cau lenh nao cho phep minh protect gia tri cua o do khong ? Vi du minh viet cau lenh sau :

Sub lucky2()
For a = 1 To 4003
For b = 1 To 8
If Sheet1.Cells(a, b).Value = "" Then
Else
Sheet1.Cells(a, b).Protect = True
End If
Next
Next
End Sub

Ở đây mình muốn so sánh các dữ liệu trong các ô từ 1 đến 8 và các hàng từ 1 đến 4003. Nếu ô nào có dữ liệu thì khóa luôn ô đó lại, không cho phép người sử dụng sửa chữa nếu không có pass.

Tuy nhiên câu lệnh Sheet1.Cells(a, b).Protect = True báo lỗi vì excel không có câu lệnh này.

Bạn nào có thể giúp mình được không.

Cám ơn các bạn.

Thân ái,
 
Bạn xem file đính kèm có đúng ý chưa, tuy nhiên chạy hơi chậm.

TP.
 

File đính kèm

  • LockValueCells.rar
    22.8 KB · Đọc: 117
Cám ơn bạn Phong nhé.
Tuy nhiên nếu mình dùng 2 dòng FOR thì máy sẽ báo Unable to set the Locked property of the Range class.
Mình cũng chưa hiểu vì sao tại sao lại báo lỗi như vậy.
Nếu dùng câu lệnh trên của bạn thì ok.
 
Chao cac ban,
Minh viet macro cua minh nhu vay

Sub lucky2()
Sheet1.Protect Password:=""
For a = 1 To 4003
For b = 1 To 8
If ActiveSheet.Cells(a, b).Value = "" Then
ActiveSheet.Cells(a, b).Locked = False
Else
ActiveSheet.Cells(a, b).Locked = True
End If
Next
Next
End Sub

Ve cơ bản, nội dung của chương trình mình cũng giống như của bạn Phong.
Tuy nhiên, tại sao khi mình chạy macro, máy lại báo lỗi :"Unable to set the Locked property of the Range class".
Cám ơn và thân ai,
 
Bạn thử lại code sau:
Mã:
Sub lucky2()
Dim a, b As Integer
Sheet1.Unprotect ("123456")
For a = 1 To 4003
For b = 1 To 8
If ActiveSheet.Cells(a, b).Value = "" Then
ActiveSheet.Cells(a, b).Locked = False
Else
ActiveSheet.Cells(a, b).Locked = True
End If
Next
Next
Sheet1.Protect ("123456")
End Sub
 
Chào bạn Phong,
Mình tìm ra nguyên nhân rồi.
Đầu tiên bạn phải unprotect sheet để có thể nhập dữ liệu vào.
Sau đó khi đã nhập dữ liệu bạn phải protect nó lại.
Thân ái và cám ơn bạn rất nhiều.
 
Chao ban!
Mình mới học được cách protect sheet qua GPE. Trong VBA Worksheet bạn copy doạn mã này chạy thử xem sao.
===================================================
Private Sub CellProtect(ByVal Sh As Object, ByVal Target As Range)
Dim rng As Range
For Each rng In Target.Cells
If IsEmpty(rng) Then
ActiveSheet.Unprotect
Exit Sub
Else
ActiveSheet.protect
End If
Next rng
End Sub
=======================================================
 
Web KT
Back
Top Bottom