Cách nào để không cho saveas 1 workbook đang mở (1 người xem)

Liên hệ QC

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

NgoctrinhUSA

Thành viên hoạt động
Tham gia
17/3/19
Bài viết
112
Được thích
37
Cho em hỏi có cách nào để không cho saveas một workbook A đang mở từ 1 Code VBA bên ngoài không workbook A không ạ
 
Cho em hỏi có cách nào để không cho saveas một workbook A đang mở từ 1 Code VBA bên ngoài không workbook A không ạ
Bạn thử copy đoạn code dưới vào trong module "ThisWorkbook" của "workbook A" xem được không ạ:
Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then
        MsgBox "Khong dc SaveAs !!", vbCritical + vbOKOnly, "Thong bao"
    End If
    Cancel = True
End Sub
 
Upvote 0
Bạn thử copy đoạn code dưới vào trong module "ThisWorkbook" của "workbook A" xem được không ạ:
Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then
        MsgBox "Khong dc SaveAs !!", vbCritical + vbOKOnly, "Thong bao"
    End If
    Cancel = True
End Sub
CÁm ỏn bạn Code này chỉ có tác dụng khong cho saveas trong workbook A nhưng vẫn saveas được từ bên ngoài ạ
 
Upvote 0
CÁm ỏn bạn Code này chỉ có tác dụng khong cho saveas trong workbook A nhưng vẫn saveas được từ bên ngoài ạ
Có nghĩa bạn dùng 1 file A và dùng lệnh để mở một file B và file này chỉ được xem chứ không được lưu ra 1 file khác hay sao?
 
Upvote 0
Có nghĩa bạn dùng 1 file A và dùng lệnh để mở một file B và file này chỉ được xem chứ không được lưu ra 1 file khác hay sao?
Không bạn mình muốn workbook A không được saveas thành workbook khác khi một workbook khác tác động bằng lệnh workbookA.saveas lên nó
 
Upvote 0
Không bạn mình muốn workbook A không được saveas thành workbook khác khi một workbook khác tác động bằng lệnh workbookA.saveas lên nó
Nếu xét trường hợp vẫn cho lưu file nhưng Sheets("A") sẽ bị xóa trong file mới được không?
Mã:
Bỏ trong ThisWorkbook
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then
        Application.DisplayAlerts = False
        On Error Resume Next
        Sheets("A").Delete
        Application.DisplayAlerts = True
    End If
End Sub
 

File đính kèm

Upvote 0
Nếu xét trường hợp vẫn cho lưu file nhưng Sheets("A") sẽ bị xóa trong file mới được không?
Mã:
Bỏ trong ThisWorkbook
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then
        Application.DisplayAlerts = False
        On Error Resume Next
        Sheets("A").Delete
        Application.DisplayAlerts = True
    End If
End Sub
vẫn saveas được bạn à mình đã test
 
Upvote 0
Nếu xét trường hợp vẫn cho lưu file nhưng Sheets("A") sẽ bị xóa trong file mới được không?
Mã:
Bỏ trong ThisWorkbook
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then
        Application.DisplayAlerts = False
        On Error Resume Next
        Sheets("A").Delete
        Application.DisplayAlerts = True
    End If
End Sub
Nếu saveas được bạn xoá hết sheet luôn
Bài đã được tự động gộp:

Thì mình nói là vẫn lưu được nhưng Sheet("A") đã bị xóa
Mình thấy sheet A còn Nguyễn bạn à
 
Upvote 0
Để làm được như vậy thì bạn cần thử thủ thuật sau.

PHP:
'Tạo Workbook copy code sau vào ThisWorkbook Code và save lại.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.Saved = True
End Sub

'Sau đó copy code sau vào Workbook của bạn và save lại.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If Not Evaluate("=ISREF('CBS_WS'!A1)") Then
    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "CBS_WS" & ""
    Worksheets("CBS_WS" & "").Move After:=Worksheets(Worksheets.Count)
    Worksheets("CBS_WS" & "").Visible = 2
    Exit Sub
  End If
  Cancel = True
End Sub
'Nếu chế độ cho phép Macro được bật thì Workbook sẽ không thể save bất kì dữ liệu nào nữa
'Bạn chỉ có thể sửa dữ liệu ở chế độ Designer Mode và Enable Macro = False
 
Upvote 0
Nếu saveas được bạn xoá hết sheet luôn
Bài đã được tự động gộp:


Mình thấy sheet A còn Nguyễn bạn à
Vậy bạn tạo 1 sheet "Home" để làm trang chủ các sheet khác là dữ liệu của bạn khi lưu sẽ bị xóa hết.
Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 Dim sh As Worksheet
    If SaveAsUI Then
        Application.DisplayAlerts = False
        On Error Resume Next
For Each Ws In Worksheets
    If Ws.Name <> "HOME" Then Ws.Delete
Next Ws
   End If
        Application.DisplayAlerts = True
End Sub
 

File đính kèm

Upvote 0
Để làm được như vậy thì bạn cần thử thủ thuật sau.

PHP:
'Tạo Workbook copy code sau vào ThisWorkbook Code và save lại.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.Saved = True
End Sub

'Sau đó copy code sau vào Workbook của bạn và save lại.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If Not Evaluate("=ISREF('CBS_WS'!A1)") Then
    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "CBS_WS" & ""
    Worksheets("CBS_WS" & "").Move After:=Worksheets(Worksheets.Count)
    Worksheets("CBS_WS" & "").Visible = 2
    Exit Sub
  End If
  Cancel = True
End Sub
'Nếu chế độ cho phép Macro được bật thì Workbook sẽ không thể save bất kì dữ liệu nào nữa
'Bạn chỉ có thể sửa dữ liệu ở chế độ Designer Mode và Enable Macro = False
cám ơn a đã quan tâm nhưng theo hướng này thì không đúng mục đích của e
-em muốn dữ liệu vẫn được lưu nhưng không cho saveas thành workbook khác hoặc saveas được nhưng dữ liệu sẽ bị xóa hết
-lệnh saveas này được thực hiện từ workbook bên ngoài mà mình không biết trước được nên không thể thêm code vào đươc ạ
Bài đã được tự động gộp:

Vậy bạn tạo 1 sheet "Home" để làm trang chủ các sheet khác là dữ liệu của bạn khi lưu sẽ bị xóa hết.
Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim sh As Worksheet
    If SaveAsUI Then
        Application.DisplayAlerts = False
        On Error Resume Next
For Each Ws In Worksheets
    If Ws.Name <> "HOME" Then Ws.Delete
Next Ws
   End If
        Application.DisplayAlerts = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy tôi không thể giúp gì hơn cho bạn rồi
 
Upvote 0
Upvote 0
Cũng dùng saveas thôi bạn
Đồng ý với bạn là mục đích đều là save as nhưng phương thức có thể khác nhau, nên phải có Add-ins của bạn tôi mới biết nó là gì.
Còn bạn muốn nó thực hiện theo đúng ý bạn thì làm theo cách truyền thống bấm F12 hoặc File - Save As - chọn file excel lưu đè lên sẽ thấy kết quả.
 
Upvote 0
Đồng ý với bạn là mục đích đều là save as nhưng phức thức có thể khác nhau, nên phải có Add-ins của bạn tôi mới biết nó là gì.
Còn bạn muốn nó thực hiện theo đúng ý bạn thì là cách truyền thống File - Save As - chọn file excel lưu đè lên sẽ thấy kết quả.
Nếu ngăn saveas bằng phương thức thủ công thì cách bạn ok nhưng mình muốn theo hướng khác như đã nói ở trên có lẽ không làm dc cám ơn bạn đã quan tâm
 
Upvote 0
Nếu ngăn saveas bằng phương thức thủ công thì cách bạn ok nhưng mình muốn theo hướng khác như đã nói ở trên có lẽ không làm dc cám ơn bạn đã quan tâm
Chưa chắc là sẽ không làm được vì anh chị diễn đàn không thấy mặt mũi file và add-ins save as của bạn đang dùng.
Vì thế hướng của bạn sẽ không ai có thể giúp ngoại trừ có file thật..
 
Upvote 0
Web KT

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

Back
Top Bottom