Chặn save trên Excel

vbano1

SMod
Thành viên BQT
Có nhiều tình huống mà chúng ta muốn ngăn chặn người dùng save file excel.
Chẳng hạn excel làm việc thông qua macro, thì việc ghi dữ liệu và save là do macro thực hiện. Chúng ta không muốn người dùng can thiệp ngoài ý muốn.
Mã:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.Saved = True
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim xName As String
xName = "CancelBeforeSave"
 
If Not Evaluate("=ISREF('" & xName & "'!A1)") Then
    Sheets.Add(after:=Worksheets(Worksheets.count)).Name = xName & ""
    Sheets(xName & "").Move after:=Worksheets(Worksheets.count)
    Sheets(xName & "").Visible = False
    Exit Sub
End If
    Cancel = True
End Sub
Bạn cần đăng nhập để thấy đính kèm


Lưu file, để định dạng là .xlsm nhé.
Bây giờ thì bạn hãy test thử xem, mình không thể save, ctr+s, thậm chí là save as new dưới dạng file mới.
Thật là lợi hại.
Nguồn:
 
H

Hồng Phương

Guest
Nếu như vậy thì cũng không tốt chị nhỉ
Vậy chị đổi code là nếu muốn lưu lại thì phải có mật khẩu thì em nghĩ sẽ linh hoạt hơn.
 

vbano1

SMod
Thành viên BQT
Nếu như vậy thì cũng không tốt chị nhỉ
Vậy chị đổi code là nếu muốn lưu lại thì phải có mật khẩu thì em nghĩ sẽ linh hoạt hơn.
Cũng còn tùy mục đích chứ em.
Ví dụ người thiết kế muốn:
Input => Tool => Output.
Tức là file Tool chỉ là công cụ thôi, thực tế không có ghi thông tin gì lên file đó, như vậy việc Save là không cần. Ngoài ra còn có những lý do khác. Thường những bài viết trên diễn đàn lý giải kiến thức rồi sau đó sẽ đi đến một cái Tool nào đó muốn ra mắt giới thiệu cho mọi người. Đón chờ nhé.
 

tuhocvba

Administrator
Thành viên BQT
Nếu như vậy thì cũng không tốt chị nhỉ
Vậy chị đổi code là nếu muốn lưu lại thì phải có mật khẩu thì em nghĩ sẽ linh hoạt hơn.
Em khai báo thêm hằng số mật khẩu.
Trước khi chạy vào phần code chính thì cho kiểm tra.
Nếu người dùng nhập đúng mật khẩu thì thoát khỏi hàm.
Nếu nhập sai thì hàm chạy bình thường để chặn.
Mã:
Const pw As String = "tuhocvba.net"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim mk As String
    mk = InputBox("Hay nhap mat khau")
    If mk = pw Then Exit Sub
        ThisWorkbook.Saved = True
    
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim xName As String
Dim mk As String
    mk = InputBox("Hay nhap mat khau")
    If mk = pw Then Exit Sub
    
xName = "CancelBeforeSave"
 
If Not Evaluate("=ISREF('" & xName & "'!A1)") Then
    Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = xName & ""
    Sheets(xName & "").Move after:=Worksheets(Worksheets.Count)
    Sheets(xName & "").Visible = False
    Exit Sub
End If
    Cancel = True
End Sub
Giờ em ấn ctr+s hoặc lưu file mới save as new... thì sẽ hiển thị hộp thoại nhập mật khẩu.
Mật khẩu của chương trình trên là "tuhocvba.net", nếu nhập đúng thì nó cho save.
 

Euler

Administrator
Thành viên BQT
Code này có vẻ ngắn gọn mà cũng hiệu quả:
Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = True
End Sub
 
Top