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 ạ
Bạn thử copy đoạn code dưới vào trong module "ThisWorkbook" của "workbook A" xem được 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 ạ
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 ạ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ó 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?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 ạ
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ó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?
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?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ó
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 đã testNế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ônNế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
Mình thấy sheet A còn Nguyễn bạn àThì mình nói là vẫn lưu được nhưng Sheet("A") đã bị xóa
'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
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.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 à
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àm được như vậy thì bạn cần thử thủ thuật sau.
cám ơn a đã quan tâm nhưng theo hướng này thì không đúng mục đích của ePHP:'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
-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 ạ
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
Cũng dùng saveas thôi bạnBạn thử chọn bằng thủ công File - Save As thử còn phần addins của bạn tôi không thấy file nên không biết dó là lệnh gì?
Dạ e cám ơn a ạVậy tôi không thể giúp gì hơn cho bạn rồi
Đồ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ũng dùng saveas thôi bạn
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Đồ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ả.
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.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