Kiem soat viec nhap du lieu

  • Thread starter giangyen
  • Ngày gửi
G

giangyen

Sơ cấp
14/10/05
8
0
0
41
Ha Noi
#1
Các bác giúp em với.
Em muốn bảo toàn chính xác việc nhập dữ liệu nên em muốn sau khi đã nhập dữ liệu vào cell thì nó tự động khóa lại. Khi cần sửa chữa nhập lại thì yêu cầu gõ Password. Nhập lần đầu tiên thì ko cần. Rất mong các bác chỉ giáo
 
Secret_grasses

Secret_grasses

Cao cấp
#2
Mình trích bài trả lời của HảiĐăng ở mục Excel chuyên đề/khóa cell như thế nào. Bạn đọc rồi làm thử xem nhé.
HảiĐăng nói:
Bạn chọn format cell\ Protection\locked (được đánh dấu)
Sau đó chọn Tools\ Protection\ Protect sheets và chọn tiếp, có thể nhập pass word hay không thì tùy
 
Sửa lần cuối:
D

duyennt

Thành viên thân thiết
14/7/05
94
0
6
Bình Dương
#3
Tôi thấy yêu cầu của bạn giangyen không đơn giản như vậy đâu Secret grasses, vấn đề bạn ấy muốn là nhập dữ liệu vào cell rồi cell đó "tự động khóa" lại thế mới đáng nói, còn ở đây Excel thông thường như tôi biết thì mình phải "đóng" và sau đó muốn vào sửa thì phải "mở".
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
845
7
18
37
Nha Trang
#4
Sáng nay đọc bài của bạn GiangYen tôi đã thử làm rồi!
Có thể làm được cũng đơn giản thôi chỉ cần một vài đoạn code như sau:
Code cho "thisworkbook"
----
Private Sub Workbook_Open()
Sheets("Sheet1").Unprotect , password:=""
Sheets("Sheet1").Cells.Locked = False
Sheets("Sheet1").Protect , password:=""
End Sub
----
Code Cho sheet1 (hoặc sheet chứa dử liệu mà bạn muốn kiểm soát)

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect , password:=""
Target.Locked = True
ActiveSheet.Protect , password:=""
End Sub

Nhưng khó khăn là ở chổ mổi lần muốn chỉnh sửa thì phải dùng unprotect. tất nhiên là bạn muốn đặt password thì thêm password thôi.
 
T

the7habitsman

Sơ cấp
10/9/05
89
0
0
Hà nội
#5
giangyen nói:
Các bác giúp em với.
Em muốn bảo toàn chính xác việc nhập dữ liệu nên em muốn sau khi đã nhập dữ liệu vào cell thì nó tự động khóa lại. Khi cần sửa chữa nhập lại thì yêu cầu gõ Password. Nhập lần đầu tiên thì ko cần. Rất mong các bác chỉ giáo

THIS IS GUIDLINE ONLY
Tư tưởng thôi nhé, còn ko biết Excel có làm được ko:
Dùng VBA, bắt sự kiện (events) keydown & keypress của cell -> Bắt tất cả các KeyCode của event KeyDown, KeyAsscii của event KeyPress. Nếu IsProtected = True thì cho KeyCode hay KeyAsscii = 0 hết, đồng thời show form nhập password lên. Nếu nhập pws đúng, gán IsProtected = False, rồi close form đó lại và cho phép nhập như bình thường.

1. Khai báo biến IsProtected ở Module Sheet nào mà định áp dụng
Dim IsProtected As Boolean

2. In ... Load Sheet :)
IsProtected = True

3. In KeyDown event (Or KeyPress event)
If KeyCode <> Các loại code cho các phím Down, Up, Home, PageUp,... Then
If IsProtected Then
KeyCode = 0 '// Trong KeyPress thì viết là KeyAsscii = 0
frmPWS.Show vbModal
End if
End If

4. In Leave Cell event (Bạn tự tìm cái sự kiện tương đương trong Excel nhé)

IsProtected = True


5. Trong Form frmPWS (1 text box có tên là txtPws, 1 label có tên là lblPws, 2 Buttons: OK and Cancel)

In OK Button Click:
If txtPws.Text = "YourPws" Then
IsProtected = False
Unload Me
Else
Msgbox "Wrong Password!", vbExclamation, "Invalid Password"
If txtPws.Enable Then txtPws.SetForcus
End if

Nói tóm lại, bạn làm như là bạn suy nghĩ về mặt Logic ấy

P/S: Nhưng mà làm gì yêu cầu đến mức đó nhỉ? Chẳng nhẽ lại protect cho từng cell?
 
Sửa lần cuối:
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#6
This instruction is for VBA beginer, not for "cao thủ"! :biggrin:
Thử cái code for Thisworkbook này xem, khi mở file, bạn làm gì đó thì làm nhưng những ô có chứa dữ liệu hay hàm... đều bị khóa. Nếu bạn muốn sửa thì phải Unprotect sheet với password khai báo ở Const. Trong quá trình làm, bạn có thể sửa những ô vừa nhập, nhưng khi save rồi thì ô này bị khóa luôn.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Const Pwrd = "abc"
Dim Sh As Object
On Error Resume Next
For Each Sh In ActiveWorkbook.Sheets
Sh.Unprotect Password:=Pwrd
Sh.Cells.Locked = True
Sh.Cells.SpecialCells(xlCellTypeBlanks).Locked = False
Sh.Protect Password:=Pwrd
Next Sh
End Sub
 
G

giangyen

Sơ cấp
14/10/05
8
0
0
41
Ha Noi
#7
Bac adam tran oi em cam on bac nhieu lam ve doan code do. Nhung phien bac xem lai giup em la luc save xong dong file lai, luc mo ra thi no lock tat ca, ke ca o trang lan o co du lieu roi

---------
Bác vui lòng edit lại bài của bác cho có dấu cho mọi người dể đọc. NguyênBình
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
845
7
18
37
Nha Trang
#8
Đây mời các bác kiểm nghiệm file kiểm soát nhập liệu này của em.
Nói chung là đáp ứng được nhu cầu của bác giangyen nhưng chỉ có điều là muốn edit cell thì chỉ có cách dùng chuột double_click.
Mời các bác chỉ giáo thêm cho em.
 

Đính kèm

G

giangyen

Sơ cấp
14/10/05
8
0
0
41
Ha Noi
#9
Bác Nguyên Bình ơi bác kiểm tra lại cái file bác gửi giúp em với. Em nhập dữ liệu bình thường chẳng cần password đâu, mà đoạn code đó còn bị lỗi nữa chứ.
 
G

giangyen

Sơ cấp
14/10/05
8
0
0
41
Ha Noi
#10
Cam on bac Nguyên Bình em sửa lại một chút là xài được rồi. Chúc bác khoẻ
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
845
7
18
37
Nha Trang
#11
Em quên mất, password là "abc",
To GiangYen: Bác sửa lại thế nào cho em biết với để em còn sửa lổi của mình nữa. Cám ơn bác.
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#12
giangyen nói:
Bac adam tran oi em cam on bac nhieu lam ve doan code do. Nhung phien bac xem lai giup em la luc save xong dong file lai, luc mo ra thi no lock tat ca, ke ca o trang lan o co du lieu roi
Uh sorry, lệnh Cells.SpecialCells chỉ chọn những ô trong 1 vùng giới hạn Current Region. Bạn sửa một tí theo code sau.

'Code for ThisWorkbook
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Const Pwrd = "abc"
Dim Sh As Worksheet
On Error Resume Next
'Loop throught all sheets in workbook
For Each Sh In ActiveWorkbook.Sheets
With Sh
.Unprotect Password:=Pwrd
'Unlock all cells
.Cells.Locked = False
'Lock all cells which contain constants (any text or number)
.Cells.SpecialCells(xlCellTypeConstants).Locked = True
'Lock all cells which contain any formula
.Cells.SpecialCells(xlCellTypeFormulas).Locked = True
.Protect Password:=Pwrd
End With
Next Sh
End Sub

Code trên chỉ có tính chất gợi ý, nếu đã làm quen với VBA bạn phải tìm hiểu kỹ một chút mới sử dụng được.
 
Sửa lần cuối:
G

giangyen

Sơ cấp
14/10/05
8
0
0
41
Ha Noi
#13
Ðề: Kiem soat viec nhap du lieu

Bác Nguyên Bình ơi bác kiểm tra lại đoạn code chút đi, chạy hay gặp lỗi lắm
 

Thành viên trực tuyến

Không có thành viên trực tuyến.




Xem nhiều