Kiem soat viec nhap du lieu

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi giangyen, 19 Tháng mười 2005.

4,881 lượt xem

  1. giangyen

    giangyen Thành viên sơ cấp

    Bài viết:
    8
    Đã được thích:
    0
    Nơi ở:
    Ha Noi
    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
     
    #1
  2. Secret_grasses

    Secret_grasses Thành viên sơ cấp

    Bài viết:
    317
    Đã được thích:
    3
    Nơi ở:
    Ngôi nhà nhỏ trên thảo nguyên.
    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é.
     
    Last edited: 20 Tháng mười 2005
    #2
  3. duyennt

    duyennt Thành viên thân thiết

    Bài viết:
    94
    Đã được thích:
    0
    Nơi ở:
    Bình Dương
    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ở".
     
    #3
  4. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    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.
     
    #4
  5. the7habitsman

    the7habitsman Thành viên sơ cấp

    Bài viết:
    89
    Đã được thích:
    0
    Nơi ở:
    Hà nội

    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?
     
    Last edited: 20 Tháng mười 2005
    #5
  6. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    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
     
    #6
  7. giangyen

    giangyen Thành viên sơ cấp

    Bài viết:
    8
    Đã được thích:
    0
    Nơi ở:
    Ha Noi
    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
     
    #7
  8. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    Đâ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.
     

    Các file đính kèm:

    #8
  9. giangyen

    giangyen Thành viên sơ cấp

    Bài viết:
    8
    Đã được thích:
    0
    Nơi ở:
    Ha Noi
    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ứ.
     
    #9
  10. giangyen

    giangyen Thành viên sơ cấp

    Bài viết:
    8
    Đã được thích:
    0
    Nơi ở:
    Ha Noi
    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ẻ
     
    #10
  11. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    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.
     
    #11
  12. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    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.
     
    Last edited: 24 Tháng mười 2005
    #12
  13. giangyen

    giangyen Thành viên sơ cấp

    Bài viết:
    8
    Đã được thích:
    0
    Nơi ở:
    Ha Noi
    Ðề: 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
     
    #13

Chia sẻ trang này