Cho em hỏi cách khóa CELL sau khi nhập lần đầu tiên! (1 người xem)

  • Thread starter Thread starter lammtv
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

lammtv

Thành viên hoạt động
Tham gia
22/6/08
Bài viết
162
Được thích
28
Cho em hỏi trong excel có cách nào khóa cell lại sau khi mình nhập dữ liệu vào đó ko mấy anh chị? Có nghĩa là ban đầu ô đó là ô trống, sau khi mình nhập vào xong rồi thì mình ko chỉnh sửa được ô đó, phải có password mới chỉnh được! Em đã tìm hiểu cách đặt pass cho cell trong excel rồi nhưng chưa đúng ý em, vì file này là file chung của đám linh em, cuối mỗi ngày là tụi nó phải nhập khối lượng công việc vào, em sợ đến ngày thứ 10 thì nó sửa lại ngày 1 hay ngày 2 thì em ko kiểm soát được!Cuối tháng em tổng kết 1 lần em sợ em ko biết nó có sửa mấy ngày đầu tiên ko nữa!
Mong anh chị giúp dùm em!
Nếu câu hỏi của em có tối nghĩa thì nhờ mấy anh em giúp dùm em cách nào mà quản lý bảng tính mà sau khi nhân viên em nhập xong là nó tự động ko sửa được, cuối tuần hoặc cuối tháng em mới tổng kết 1 lần!
Thanks anh chị em nhiều!
 
Lần chỉnh sửa cuối:
gíup em với mấy anh!
 
Mình không biết Excel có chức năng như bạn mong muốn ko?
Nhưng nếu chỗ bạn có internet thì sau mỗi buổi bạn yêu cầu nhân viên của bạn gửi mail cho bạn (daily report) cuối tháng yêu cầu họ gửi bảng tổng hợp lên. Như thế bạn có thể kiểm tra bất cứ ngày nào mà ko lo bị chỉnh sửa.
Bác nào biết thì post cho anh em cùng tham khảo nhé !
 
Dạ, cám ơn anh! Nhưng đau 1 cái là chỉ có 1 file excel mà rất nhiều nhân viên phải điền!Nên ko thể gửi mail dc anh ơi!
 
Dạ, cám ơn anh! Nhưng đau 1 cái là chỉ có 1 file excel mà rất nhiều nhân viên phải điền!Nên ko thể gửi mail dc anh ơi!
Bạn thử nhập gì đó File này xem sao nhé (File chỉ minh họa không lịch sự lắm mong mọi người thông cảm)
 

File đính kèm

Bạn thử nhập gì đó File này xem sao nhé (File chỉ minh họa không lịch sự lắm mong mọi người thông cảm)
Anh cho em hỏi 1 số vấn đề với:
1/ Em muốn áp dụng cho file excel của em thì em cần copy đoạn code này vào file là dc phải ko anh? sao em copy vào ngay cả ô trống nó cũng ko cho điền vậy anh?
2/ Giờ em muốn thay đổi 1 chút là mấy ô đó muốn nhập mấy lần và nhập khi nào cũng được nhưng sau khi nhập xong thì 1 khoảng thời gian nào đó là nó tự khóa, ví dụ em điền 15 phút vào thì sau 15 phút nó khóa, còn trước đó thì chỉnh sửa tha hồ! Số phút đó chỉ có mình chỉnh sửa được thôi và có password! Các ô cũng vậy sau 15 phút thì muốn sửa cũng phải có password giống như vì dụ anh mới làm cho em đó!
Hixx khả năng diễn dãi của em kém ko biết anh có giúp dc em ko nưa! Thank anh rất nhiều!
 
Anh cho em hỏi 1 số vấn đề với:
1/ Em muốn áp dụng cho file excel của em thì em cần copy đoạn code này vào file là dc phải ko anh? sao em copy vào ngay cả ô trống nó cũng ko cho điền vậy anh?
2/ Giờ em muốn thay đổi 1 chút là mấy ô đó muốn nhập mấy lần và nhập khi nào cũng được nhưng sau khi nhập xong thì 1 khoảng thời gian nào đó là nó tự khóa, ví dụ em điền 15 phút vào thì sau 15 phút nó khóa, còn trước đó thì chỉnh sửa tha hồ! Số phút đó chỉ có mình chỉnh sửa được thôi và có password! Các ô cũng vậy sau 15 phút thì muốn sửa cũng phải có password giống như vì dụ anh mới làm cho em đó!
Hixx khả năng diễn dãi của em kém ko biết anh có giúp dc em ko nưa! Thank anh rất nhiều!

1. Bạn nhấn Ctr+A nhấn Ctrl+1 -> chọn thẻ Protection -> bỏ tích chọn Locked
2. Bạn nhấn Alt+F1 và kích kép vào Sheet1 file của tôi và copy đoạn mã đó vào Sheet dùng của file bạn là được
 
1. Bạn nhấn Ctr+A nhấn Ctrl+1 -> chọn thẻ Protection -> bỏ tích chọn Locked
2. Bạn nhấn Alt+F1 và kích kép vào Sheet1 file của tôi và copy đoạn mã đó vào Sheet dùng của file bạn là được
Thanks anh nhiều! Nhờ anh giúp dùm em yêu cầu thứ 2 dc ko ạ! Chân thành cảm ơn anh nhiều!
 
Thanks anh nhiều! Nhờ anh giúp dùm em yêu cầu thứ 2 dc ko ạ! Chân thành cảm ơn anh nhiều!
Chẳng dễ ăn với yêu cầu này đâu (tuy tôi nghĩ là làm được bằng hàm API SetTimer)
Nguyên tắc:
- Mở file lên, nếu gõ gì đó vào cell thì bắt đầu tính giờ (kích hoạt hàm SetTimer)
- Đến 1 khoảng thời gian nào đó tùy chỉnh thì kích hoạt khóa cell
Nói vậy thôi chứ viết cho hoàn chỉnh thật không đơn giản chút nào... Vậy thôi mơ làm gì, đến khi muốn thay đổi gì đó thì bạn biết đường đâu mà sửa code
 
Chẳng dễ ăn với yêu cầu này đâu (tuy tôi nghĩ là làm được bằng hàm API SetTimer)
Nguyên tắc:
- Mở file lên, nếu gõ gì đó vào cell thì bắt đầu tính giờ (kích hoạt hàm SetTimer)
- Đến 1 khoảng thời gian nào đó tùy chỉnh thì kích hoạt khóa cell
Nói vậy thôi chứ viết cho hoàn chỉnh thật không đơn giản chút nào... Vậy thôi mơ làm gì, đến khi muốn thay đổi gì đó thì bạn biết đường đâu mà sửa code
Cảm ơn thầy nhiều ah! Có thể nó có textbox để mình điền thời gian vào đó để kích hoạt thời gian trước! Khi mở file excel lên thì trong textbox đang hiện thời gian là bao nhiêu thì nó sẽ hiểu! Em cảm ơn thầy đã quan tâm! Nếu nó khó thực hiện quá thì chắc thôi ạ! Nhưng dù sao em cũng hy vọng các anh giúp dùm em ạ! Xin chân thành cảm ơn!
 
vậy là bất khả thi rồi hả mấy anh?
 
vậy là bất khả thi rồi hả mấy anh?
Trong File tôi làm ở trên tôi làm như sau:
1. Khi nhập số liệu cho 1 cell nào xong thì thực hiện mở Pas của Sheet
2. Muốn Khóa cell vừa nhập phải tích chọn Locked lại và đặt mật khẩu cho sheet
Như vậy nếu bạn muốn để cho 15 phút để nhập thì trong thời gian đó (code đã mở pas) thì các dữ liệu trước đây họ cũng sữa được (pas chẳng có ý nghĩa gì ???). Còn cách vừa khóa các cell cũ đã nhập và cell mới nhập cho phép nhập 15 thì tôi không nghĩ ra.
 
vậy là bất khả thi rồi hả mấy anh?
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
 

File đính kèm

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 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ái này e rằng... quá khó ---> Vì do dù bạn có viết code thế nào đi nữa, bùn lắm, cái thằng người dùng nó đóng không được file, nó sẽ End Process trong Task Manager (End thằng Excel.exe) thì code cũng bằng thừa
 
Cảm ơn thầy rất nhiều! Rất đúng ý em! Mình muốn đổi thời gian chỉ cần đổi TimeValue("00:00:05")là được phải ko thầy?
 
Cảm ơn thầy rất nhiều! Rất đúng ý em! Mình muốn đổi thời gian chỉ cần đổi TimeValue("00:00:05")là được phải ko thầy?
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 em hỏi 1 chút nhé thầy! Nếu bấm Alt+F8 xóa cái macro đó thì file mình có bị sao ko thầy?
 
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!
 
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

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

Back
Top Bottom