Cho em hỏi cách khóa CELL sau khi nhập lần đầu tiên!

Liên hệ QC
thầy cho em hỏi! Khi em muốn sửa em unprotect rồi nhập pass, sau đó em muốn protect lại thì sao thầy?em đợi 5 giây nó ko tự động khóa!
Tôi thử thấy bình thường mà bạn:
- Tôi Unprotect sheet, nhập password
- Sửa dữ liệu
- Chở quá 5s thì sheet sẽ tự động protect (cell vừa sửa xong đã bị khóa)
 
Uh... TimeValue("00:00:05") được viết theo định dạng hh:mm:ss
vậy:
TimeValue("00:00:05") tương đương 5 giây
TimeValue("00:05:00") tương đương 5 phút

Thầy cho phép em hỏi là: còn nếu muốn lock workbook thì code phải chỉnh lại ra sao thưa thầy??
 
Cách đơn giản mà rất hay. ndu96081631 có thể "chế" thêm để code đạt được điều này không: Chưa hết thời gian hạn định để khóa cell thì không đóng được file Excel đang thao tác.

cách này hay nhưng làm sao để không copy được luôn vậy, vì nếu copy được thì paste qua sheet khác thì mọi thứ mất tác dụng! nhờ chỉ giáo! thanks
 
Tôi thử thấy bình thường mà bạn:
- Tôi Unprotect sheet, nhập password
- Sửa dữ liệu
- Chở quá 5s thì sheet sẽ tự động protect (cell vừa sửa xong đã bị khóa)
Em chào thầy ạ!
Em đang tìm hiểu về vấn đề này ạ nhưng về excel em gà mờ quá, mặc dù chủ đề này cũng lâu quá rồi, hy vọng thầy đọc được.
Em muốn lập 1 VBA áp dụng cho 1 file excel bất kỳ nào đó, công việc là : trong 1 bảng excel, sau khi 1 ô trống được nhập dữ liệu lần đầu tiên vào và đồng thời phải save hoặc close file thì VBA sẽ chạy tính năng tự động khóa cái ô đó lại không cho edit, muốn edit lại những gì đã nhập lúc trước thì phải nhập pass ạ.

Ví dụ trong 1 bảng theo dõi bất kỳ, sẽ có sẵn 1 form bảng đã được lập đi kèm đầy đủ công thức đang được khóa sẵn bằng pass số 1, khóa này mục đích là để cố định cấu trúc (dữ liệu cố định, tiêu đề,...) , khóa và ẩn công thức tính toán của bảng.
Còn những ô trống còn lại trong bảng <những ô để trống để nhập dữ liệu đầu vào thủ công theo thời điểm để tính toán>, thì mình vẫn nhập được dữ liệu vào bình thường ạ, chỉ sau khi ô đó nó có dữ liệu và đồng thời mình hoàn tất việc nhập liệu bằng cách save lại (hoặc close file) thì những ô đang có dữ liệu vừa mới nhập đó sẽ tự động được khóa lại và sau này nếu muốn edit thì sẽ phải nhập pass dành riêng cho việc edit những ô vừa nhập liệu đó gọi là pass số 2 ạ (pass 1 và pass 2 khác nhau càng tốt ạ)

Một vấn đề quan trọng nữa là : em đã tìm đọc được 1 số bài viết khá tuyệt trên các diễn đàn, nhưng chưa có bài tham khảo nào xử lý được việc là khi sử dụng VBA tự động khóa như trên thì sao cho mình vẫn phải sử dụng được Auto Filter , vì em cần sử dụng được tính năng đó để lọc dữ liệu phục vụ công viêc.

Em trình bày khá rối mong thầy thông cảm và giúp đỡ em ạ!
Em xin cảm ơn thầy!
 
Mới nghĩ ra 1 cách đơn giản nhưng không biết có đáp ứng được nhu cầu của bạn hay không! Cách làm như sau:
1> Code trong Module:
PHP:
Public Check As Boolean
Sub ProtectSh()
  On Error Resume Next
  If Check = False Then
    With ActiveSheet
      .Unprotect ("gpe")
      .UsedRange.SpecialCells(2).Locked = True
      .UsedRange.SpecialCells(2).FormulaHidden = True
      .UsedRange.SpecialCells(3).Locked = True
      .UsedRange.SpecialCells(3).FormulaHidden = True
      .Protect ("gpe")
    End With
    Check = True
  End If
End Sub
2> Code trong Sheet
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error Resume Next
  If Target.Value <> "" Then
    Check = False
    Application.OnTime Now + TimeValue("00:00:05"), "ProtectSh"
  End If
End Sub
Code này sẽ khóa những cell đã có dữ liệu sau 5 giây


Em kính chào thầy ạ!
Hiện tại em đang tìm hiểu cách tự động khóa ô khi ô đó có dữ liệu qua bài viết này của thầy ạ!
Phương án của thầy trong bài viết em sử dụng rất hữu ích ạ, nhưng thầy ơi, hiện tại em đang vướng mắc việc khi sử dụng phương án này đồng thời cũng sẽ sử dụng được tính năng AutoFilter của Excel như cũ ạ, vì em thấy khi chạy VBA này thì tính năng AutoFilter của Excel lại không sử dụng được ạ! Phải thêm vào đoạn code hay xử lý như nào thầy giúp em với ạ!
Em chân thành cảm ơn!
 
Mới nghĩ ra 1 cách đơn giản nhưng không biết có đáp ứng được nhu cầu của bạn hay không! Cách làm như sau:
1> Code trong Module:
PHP:
Public Check As Boolean
Sub ProtectSh()
  On Error Resume Next
  If Check = False Then
    With ActiveSheet
      .Unprotect ("gpe")
      .UsedRange.SpecialCells(2).Locked = True
      .UsedRange.SpecialCells(2).FormulaHidden = True
      .UsedRange.SpecialCells(3).Locked = True
      .UsedRange.SpecialCells(3).FormulaHidden = True
      .Protect ("gpe")
    End With
    Check = True
  End If
End Sub
2> Code trong Sheet
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error Resume Next
  If Target.Value <> "" Then
    Check = False
    Application.OnTime Now + TimeValue("00:00:05"), "ProtectSh"
  End If
End Sub
Code này sẽ khóa những cell đã có dữ liệu sau 5 giây

code này chèn dòng k đc, nó khóa sheet, nếu đc chỉ khóa ô nhập liệu thôi,
 
Mới nghĩ ra 1 cách đơn giản nhưng không biết có đáp ứng được nhu cầu của bạn hay không! Cách làm như sau:
1> Code trong Module:
PHP:
Public Check As Boolean
Sub ProtectSh()
  On Error Resume Next
  If Check = False Then
    With ActiveSheet
      .Unprotect ("gpe")
      .UsedRange.SpecialCells(2).Locked = True
      .UsedRange.SpecialCells(2).FormulaHidden = True
      .UsedRange.SpecialCells(3).Locked = True
      .UsedRange.SpecialCells(3).FormulaHidden = True
      .Protect ("gpe")
    End With
    Check = True
  End If
End Sub
2> Code trong Sheet
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error Resume Next
  If Target.Value <> "" Then
    Check = False
    Application.OnTime Now + TimeValue("00:00:05"), "ProtectSh"
  End If
End Sub
Code này sẽ khóa những cell đã có dữ liệu sau 5 giây
xin chào anh, cho em hỏi lúc e coppy code của anh về ban đầu nó cho nhập nhưng sau 5s nó khoá hết toàn bộ không có chọn được mục tiếp theo. Nguyên Nhân là do đâu v a. Nhờ a giúp
Bài đã được tự động gộp:

Mới nghĩ ra 1 cách đơn giản nhưng không biết có đáp ứng được nhu cầu của bạn hay không! Cách làm như sau:
1> Code trong Module:
PHP:
Public Check As Boolean
Sub ProtectSh()
  On Error Resume Next
  If Check = False Then
    With ActiveSheet
      .Unprotect ("gpe")
      .UsedRange.SpecialCells(2).Locked = True
      .UsedRange.SpecialCells(2).FormulaHidden = True
      .UsedRange.SpecialCells(3).Locked = True
      .UsedRange.SpecialCells(3).FormulaHidden = True
      .Protect ("gpe")
    End With
    Check = True
  End If
End Sub
2> Code trong Sheet
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error Resume Next
  If Target.Value <> "" Then
    Check = False
    Application.OnTime Now + TimeValue("00:00:05"), "ProtectSh"
  End If
End Sub
Code này sẽ khóa những cell đã có dữ liệu sau 5 giây
xin chào anh, cho em hỏi lúc e coppy code của anh về ban đầu nó cho nhập nhưng sau 5s nó khoá hết toàn bộ không có chọn được mục tiếp theo. Nguyên Nhân là do đâu v a. Nhờ a giúp
Bài đã được tự động gộp:

Mới nghĩ ra 1 cách đơn giản nhưng không biết có đáp ứng được nhu cầu của bạn hay không! Cách làm như sau:
1> Code trong Module:
PHP:
Public Check As Boolean
Sub ProtectSh()
  On Error Resume Next
  If Check = False Then
    With ActiveSheet
      .Unprotect ("gpe")
      .UsedRange.SpecialCells(2).Locked = True
      .UsedRange.SpecialCells(2).FormulaHidden = True
      .UsedRange.SpecialCells(3).Locked = True
      .UsedRange.SpecialCells(3).FormulaHidden = True
      .Protect ("gpe")
    End With
    Check = True
  End If
End Sub
2> Code trong Sheet
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error Resume Next
  If Target.Value <> "" Then
    Check = False
    Application.OnTime Now + TimeValue("00:00:05"), "ProtectSh"
  End If
End Sub
Code này sẽ khóa những cell đã có dữ liệu sau 5 giây
xin chào anh, cho em hỏi lúc e coppy code của anh về ban đầu nó cho nhập nhưng sau 5s nó khoá hết toàn bộ không có chọn được mục tiếp theo. Nguyên Nhân là do đâu v a. Nhờ a giúp
 

File đính kèm

  • QL THIẾT BỊ- VẬT TƯ.xlsm
    154 KB · Đọc: 0
Web KT
Back
Top Bottom