Vô hiệu hóa chức năng Save As... (1 người xem)

Liên hệ QC

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

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Thử code này xem:
PHP:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
   If SaveAsUI Then Cancel = True
End Sub
ANH TUẤN
 
Cảm ơn AnhTuan1066, nhưng có vẻ không hiệu quả gì hết. Vì phím F12 và lệnh trên (File -> Save As...) vẫn còn nguyên mà người dùng thường xài chức này chứ có phải tự động đâu mà dùng "Workbook_BeforeSave". Mong mọi người giúp giùm! Em gửi ví dụ lên để bác làm nhé! Em thấy nó vẫn thế à! Nhưng cũng phải nó rằng nó chạy rất tốt trên file có định dạng *.XLS còn EXE thì tới giờ chưa có gì thay đổi cả. Mong bác suy nghĩ thêm.. Xin hỏi có cách nào viết VBA để vô hiệu hóa nút Save As. Vì nút Save As làm cho tính năng bảo mật trên file có định dạng EXE bị tiêu luôn nên xin mọi người giúp giùm. Xin cảm ơn trước nha! Note: Phá mọi cách có thể Save As ra định dạng XLS được càng nhiều càng tốt nha! Thanks...
 

File đính kèm

Lần chỉnh sửa cuối:
Vụ .exe này tôi bó tay thôi... nhưng tại sao bạn ko chạy .xls ? Cần thiết gì mà phải biến nó thành exe vậy? Đã vậy dùng cái exe này thì dung lượng file to lên rất nhiều...
Tôi ko biết file exe này có thể tự chạy trên máy tính chưa cài Office ko nhỉ?
ANH TUẤN
 
boong đã viết:
Cái vụ exe này không phải tự nhiên mà làm đâu.
Sao Excel có rất nhiều biện pháp bảo vệ, bạn lại chọn cách cực đoan vậy ???.

Không save as được thì copy thôi, sau đó mở File copy code thôi mà.
Như vậy File của bạn đâu có bảo mật như ý được đâu.

Và đặc biệt File của bạn sẽ bị Norton Antivirus tóm đầu tiên đấy.

boong đã viết:
Vì thằng BKAV này phá quá nên phải xài này cho chắc ăn luôn. Khỏi đụng BKAV nữa thôi!
Tại sao lại cứ phải dùng BKAV nhỉ ??? Không còn phương án nào khác sao bạn ???
Khi đã tiến đến mức chuyên nghiệp như bạn (Dùng Excel không cần đến . . Office) mà còn vương vấn BKAV thì có khác nào có xe hơi mà cứ còn băn khoăn sao đi xe đạp lại không cần bằng nhỉ ???

boong đã viết:
Mà cấp độ bảo mật cũng được tăng 1 level.
Tăng ở chỗ nào bạn nhỉ ??? Tớ chỉ thấy File của bạn giống như cái cây bị bứng khỏi mặt đất, sự hỗ trợ của Office cho File của bạn là gần như không có, nếu muốn thì bạn lại phải mở dưới dạng File Excel sau đó convert sang exe. Như thế có phải là phức tạp thêm không nhỉ ?? Trong khi đó File excel có biết bao nhiêu biện pháp bảo vệ.

Mấy lời góp ý!!

Thân!
 
File exe của bạn nếu không có Excel sẽ không thể chạy được!

Tôi có thể làm vô hiệu hóa cửa sổ SaveAs nhưng người ta vẫn có thể thực hiện việc SaveAs đơn giản là
Workbooks("SUBTOTAL.exe").SaveAs(...)

Nếu bạn vẫn muốn bảo mật theo hướng mã máy (exe,dll), đơn giản nhất là bạn tìm hiểu cách tạo file exe, dll trong VB6 để chạy cùng Excel.
 
Cảm ơn bác vì đã nhắc em điều này. Vậy em làm Unviewable không biết bác có cách nào giải Unviewable trong EXE file không ạ? Cho em xin luôn cách khóa lệnh Save As được không?
Nếu bạn vẫn muốn bảo mật theo hướng mã máy (exe,dll), đơn giản nhất là bạn tìm hiểu cách tạo file exe, dll trong VB6 để chạy cùng Excel.
Còn vấn đề này thì em không biết làm, bác có thể hướng dẫn sơ qua cho em một chút được không?
 

File đính kèm

Lần chỉnh sửa cuối:
Disable "Save As"

Tôi sử dụng đối tượng Class để wapping đối tượng "Save As" menu, sau đó thay thế lệnh "Save As" (XlHacker __--__ ). Đây là kỹ thuật tôi đã giới thiệu trong topic "Class module - Kỹ thuật..."
 

File đính kèm

Lần chỉnh sửa cuối:
Bác dùng tạm cái này xem
PHP:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = True
End Sub
TDN

còn cho phép save thì mình sửa lại True thành False thì mất công lắm pác Phước ơi! tạo ra 2 Button 1 và Button 2 một cái thì vô hiệu hóa còn cái nay thì cho phép save (nhưng kèm theo mật khẩu có được không nhỉ) pass: 123
 
Disable Save!

Xin gửi các bạn phiên bản 2 của DisableSavePro.

Toàn bộ mã nguồn như sau:

Module "modTest"
Mã:
Option Explicit
Dim DisableSave As clsDisableSave

Sub CreateDisableSave()
    Set DisableSave = New clsDisableSave
    DisableSave.Create Application
    DisableSave.TruePassword = "TuanVNUNI"
End Sub

Sub DestroyDisableSave()
    Set DisableSave = Nothing
End Sub

Class Module "clsDisableSave"
Mã:
Option Explicit
Private WithEvents fExcelApp As Application
Private fInputPassword As String, fTruePassword As String

Sub Create(ByVal ExcelApplication As Application)
    If Not fExcelApp Is Nothing Then
        Destroy
    End If
    Set fExcelApp = ExcelApplication
    If fExcelApp.ActiveWorkbook.ReadOnly Then
        'fExcelApp.ActiveWorkbook.ReadOnly = False
    End If
    MsgBox "All workbooks are locked!", vbExclamation
End Sub
Sub Destroy()
    Set fExcelApp = Nothing
End Sub

Private Sub fExcelApp_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = Not (fTruePassword = fInputPassword)
    SaveAsUI = Not Cancel
    If Cancel Then
        If MsgBox("The Save (As...) function is disable." & Chr(13) & _
                "Do you want to input password?", vbQuestion + vbYesNo, Wb.Name) = vbYes Then
            
            ShowInputPassword
            Cancel = Not (fTruePassword = fInputPassword)
            SaveAsUI = Not Cancel
            
        End If
    End If
End Sub

Private Sub Class_Initialize()
    'Do...
End Sub

Private Sub Class_Terminate()
    Destroy
End Sub

Property Get TruePassword() As String
    TruePassword = fTruePassword
End Property
Property Let TruePassword(ByVal Value As String)
    fTruePassword = Value
End Property

Property Get InputPassword() As String
    InputPassword = fInputPassword
End Property
Property Let InputPassword(ByVal Value As String)
    fInputPassword = Value
End Property

Sub ShowInputPassword()
    fInputPassword = fExcelApp.InputBox("Your password:")
End Sub

Các bạn có thể tham khảo file gửi kèm.
 

File đính kèm

Lần chỉnh sửa cuối:
Hiện tại công ty mình dùng chung một file excel thông qua mạng Lan. Khi một người đã mở file trước thì những người còn lại nếu mở sẽ ở chế độ "read only" và họ vẫn "save as" như thường.

Mong được trợ giúp của các cao thủ.
 
Nếu chỉ muốn người ta xem thôi thì có thể dùng phần mềm view loại file excel (như kiểu show của PowerPoint) được không?
 
Hiện tại công ty mình dùng chung một file excel thông qua mạng Lan. Khi một người đã mở file trước thì những người còn lại nếu mở sẽ ở chế độ "read only" và họ vẫn "save as" như thường.

Mong được trợ giúp của các cao thủ.

Theo đúng mục đích của bạn chắc không làm được. Có thể viết code kiểm tra khi mở (Auto_Open), nếu ReadOnly = True thì thoát luôn.
 
Theo gợi ý của bác Tuân,em thêm vào vài chú Macro. Cũng tạm ổn, trong mạng Lan nếu xem ở chế độ "Read only" file sẽ đóng khi save hoặc close, "save as" cũng tiêu luôn.
Các bác xem và giúp để em hoàn thiện.

Tuyệt vời nữa nếu khởi động file này thì Macro Security luôn chọn Low (em đã tìm trên diễn đàn rồi nhưng ko thấy như ý!)
 

File đính kèm

Nhờ bạn thêm dòng lệnh không cho save lại luôn, cái đang có chỉ là save as thôi.

Có thể nói rõ hơn mục đích của bạn không? Và bạn vận dụng nó khi nào? Lúc nào cũng chạy hay khi thoát File và không save?

Thôi, dù với mục đích gì, bạn chép code này vào sẽ không cho Save với bất cứ lúc nào, hình thức nào. (Làm việc mà không Save nghĩ cũng lạ nhỉ)

PHP:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Cancel = True
  If SaveAsUI Then Cancel = True
End Sub
 
Lần chỉnh sửa cuối:
Có thể nói rõ hơn mục đích của bạn không? Và bạn vận dụng nó khi nào? Lúc nào cũng chạy hay khi thoát File và không save?

Thôi, dù với mục đích gì, bạn chép code này vào sẽ không cho Save với bất cứ lúc nào, hình thức nào. (Làm việc mà không Save nghĩ cũng lạ nhỉ)

PHP:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
If SaveAsUI Then Cancel = True
End Sub


Cám ơn nhiều nhé, đúng cái mình cần rồi
 
If SaveAsUI Then Cancel = True đứng 1 mình thì còn có trường hợp Else (SaveAsUI = False)

Ngay từ đầu đã Cancel = True (sẽ áp đặt cho mọi trường hợp) thì cần gì If iếc nữa trời.
 
Lần chỉnh sửa cuối:
Có thể nói rõ hơn mục đích của bạn không? Và bạn vận dụng nó khi nào? Lúc nào cũng chạy hay khi thoát File và không save?

Thôi, dù với mục đích gì, bạn chép code này vào sẽ không cho Save với bất cứ lúc nào, hình thức nào. (Làm việc mà không Save nghĩ cũng lạ nhỉ)

PHP:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
If SaveAsUI Then Cancel = True
End Sub

Ồ, chèn cái này vào workbook rồi thì save lại không được, vậy thì sao mà lưu lại được? Có cách nào giải quyết không ạ?
 
Ồ, chèn cái này vào workbook rồi thì save lại không được, vậy thì sao mà lưu lại được? Có cách nào giải quyết không ạ?

Chẳng phải bạn muốn thế sao? Bạn nói: "Nhờ thêm dòng lệnh không cho save lại luôn". Do đó chỉ cần 1 dòng lệnh Cancel = True.
Bây giờ bạn phải nói rõ hơn: khi nào cho save và khi nào không cho save, khi nào cho save as và khi nào không.
 
Chẳng phải bạn muốn thế sao? Bạn nói: "Nhờ thêm dòng lệnh không cho save lại luôn". Do đó chỉ cần 1 dòng lệnh Cancel = True.
Bây giờ bạn phải nói rõ hơn: khi nào cho save và khi nào không cho save, khi nào cho save as và khi nào không.

Khi mình chèn dòng lệnh

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel =
True
If SaveAsUI Then Cancel =
True
End Sub


Sau đó cho save lại để mình còn có thể lưu lại được chứ.

Sau khi lưu lại rồi thì không cho save lại nữa.

Chứ sau khi thêm vào lệnh mà không giữ lại được thì thêm vào làm gì???
 
Khi mình chèn dòng lệnh

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel =
True
If SaveAsUI Then Cancel =
True
End Sub


Sau đó cho save lại để mình còn có thể lưu lại được chứ.

Sau khi lưu lại rồi thì không cho save lại nữa.

Chứ sau khi thêm vào lệnh mà không giữ lại được thì thêm vào làm gì???
Bạn chọn Tools\Macro\Security, chọn mức High hoặc Very high. Sau đó, khởi động lại Excel, nhập đoạn code trên vào và lưu lại. Sau đó lại chọn lại Security mức Medium hoặc Low là được.
Lưu ý là người khác cũng có thể làm được như vậy đấy nhé, có nghĩa là việc vô hiệu hóa chức năng Save hoặc Save as chỉ là tương đối thôi.
 
Khi mình chèn dòng lệnh
Sau đó cho save lại để mình còn có thể lưu lại được chứ.
Sau khi lưu lại rồi thì không cho save lại nữa.
Bạn nhấn nút design trên thanh công cụ control toolbox để vào design mode, lúc đó có thể Save. Sau đó nhấn 1 cái nữa, thoát khỏi design mode thì không cho save
 
Có thể nói rõ hơn mục đích của bạn không? Và bạn vận dụng nó khi nào? Lúc nào cũng chạy hay khi thoát File và không save?

Thôi, dù với mục đích gì, bạn chép code này vào sẽ không cho Save với bất cứ lúc nào, hình thức nào. (Làm việc mà không Save nghĩ cũng lạ nhỉ)

PHP:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
If SaveAsUI Then Cancel = True
End Sub

Bạn cho mình hỏi thêm cũng trường hợp này nhưng mình muốn khi mình nhấn nút lệnh Save (tự tạo) trên Sheet1 thì vẫn cho lưu thì làm thế nào?
 
Add-in Disabled 'Save As'

Chào các Thầy/Cô,
Vì tính chất công việc, nên tôi cần hạn chế user Save As một số Workbooks đã định sẵn (các workbook này không chứa code), nên tôi suy nghĩ đến việc sử dụng Add-in để vô hiệu hóa Save As khi người dùng chọn Save As ở các workbook đã định sẵn.

Tôi đã thử đặt code trong event Workbook_BeforeSave và save lại thành add-in. Nhưng không hoạt động được.

Rất mong nhận được sự giúp đỡ của các Thầy/Cô trong GPE.

Xin chân thành cảm ơn!
 
Chào các Thầy/Cô,
Vì tính chất công việc, nên tôi cần hạn chế user Save As một số Workbooks đã định sẵn (các workbook này không chứa code), nên tôi suy nghĩ đến việc sử dụng Add-in để vô hiệu hóa Save As khi người dùng chọn Save As ở các workbook đã định sẵn.

Tôi đã thử đặt code trong event Workbook_BeforeSave và save lại thành add-in. Nhưng không hoạt động được.

Rất mong nhận được sự giúp đỡ của các Thầy/Cô trong GPE.

Xin chân thành cảm ơn!
Không cho save as thì người ta có thể copy file đó ở windows thì coi như phí công vô ích.
 
Không cho save as thì người ta có thể copy file đó ở windows thì coi như phí công vô ích.

Chưa hẳn đã vô ích anh ạ.
Em thì không muốn họ Save aS về định dạng của 2003 và 2007 với đuôi xlsx chỉ để lưu ở Đuôi xlsm thôi, họ lưu lại với đuôi khác code vba của em bị mất toi
Còn việc họ Copy ở Win em cho File chứ không dữ
 
Chưa hẳn đã vô ích anh ạ.
Em thì không muốn họ Save aS về định dạng của 2003 và 2007 với đuôi xlsx chỉ để lưu ở Đuôi xlsm thôi, họ lưu lại với đuôi khác code vba của em bị mất toi
Còn việc họ Copy ở Win em cho File chứ không dữ
Vậy cái add-ins của bạn nó như thế nào vậy? gửi lên xem thử nhé.
 
Chào các Thầy/Cô,
Vì tính chất công việc, nên tôi cần hạn chế user Save As một số Workbooks đã định sẵn (các workbook này không chứa code), nên tôi suy nghĩ đến việc sử dụng Add-in để vô hiệu hóa Save As khi người dùng chọn Save As ở các workbook đã định sẵn.

Tôi đã thử đặt code trong event Workbook_BeforeSave và save lại thành add-in. Nhưng không hoạt động được.

Rất mong nhận được sự giúp đỡ của các Thầy/Cô trong GPE.

Xin chân thành cảm ơn!

Không biết bạn đang dùng code gì nhưng điều chắc chắn rằng: Code này chỉ có thể chạy trong chính file của bạn nhưng sẽ không chạy khi lưu thành Add-In
Muốn dạng code này có thể chạy như 1 Add-In thì phải dùng Class
Đại khái cách làm như sau:
1> Chèn 1 Class Module
Trong cửa sổ VBA, chèn 1 Class Module, đặt tên cho nó là clsSaveEvent
Code trong Class:
Mã:
Public WithEvents MyApp As Application
Private Sub MyApp_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If SaveAsUI Then
    Cancel = True
    MsgBox "SaveAs Feature is Disabled!"
  End If
End Sub
2> Code trong Thisworkbook:
Mã:
Dim AppEventClass As New clsSaveEvent
Private Sub Workbook_Open()
  Set AppEventClass.MyApp = Application
End Sub
Lưu file thành Add-In với tên tùy ý... Gọi Add-In này và thí nghiệm mở file nào đó, xong SaveAs xem nó nói gì
 
Disable Save!

Xin gửi các bạn phiên bản 2 của DisableSavePro.

Toàn bộ mã nguồn như sau:

Module "modTest"
Mã:
Option Explicit
Dim DisableSave As clsDisableSave

Sub CreateDisableSave()
    Set DisableSave = New clsDisableSave
    DisableSave.Create Application
    DisableSave.TruePassword = "TuanVNUNI"
End Sub

Sub DestroyDisableSave()
    Set DisableSave = Nothing
End Sub

Class Module "clsDisableSave"
Mã:
Option Explicit
Private WithEvents fExcelApp As Application
Private fInputPassword As String, fTruePassword As String

Sub Create(ByVal ExcelApplication As Application)
    If Not fExcelApp Is Nothing Then
        Destroy
    End If
    Set fExcelApp = ExcelApplication
    If fExcelApp.ActiveWorkbook.ReadOnly Then
        'fExcelApp.ActiveWorkbook.ReadOnly = False
    End If
    MsgBox "All workbooks are locked!", vbExclamation
End Sub
Sub Destroy()
    Set fExcelApp = Nothing
End Sub

Private Sub fExcelApp_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = Not (fTruePassword = fInputPassword)
    SaveAsUI = Not Cancel
    If Cancel Then
        If MsgBox("The Save (As...) function is disable." & Chr(13) & _
                "Do you want to input password?", vbQuestion + vbYesNo, Wb.Name) = vbYes Then
          
            ShowInputPassword
            Cancel = Not (fTruePassword = fInputPassword)
            SaveAsUI = Not Cancel
          
        End If
    End If
End Sub

Private Sub Class_Initialize()
    'Do...
End Sub

Private Sub Class_Terminate()
    Destroy
End Sub

Property Get TruePassword() As String
    TruePassword = fTruePassword
End Property
Property Let TruePassword(ByVal Value As String)
    fTruePassword = Value
End Property

Property Get InputPassword() As String
    InputPassword = fInputPassword
End Property
Property Let InputPassword(ByVal Value As String)
    fInputPassword = Value
End Property

Sub ShowInputPassword()
    fInputPassword = fExcelApp.InputBox("Your password:")
End Sub

Các bạn có thể tham khảo file gửi kèm.

Theo gợi ý của bác Tuân,em thêm vào vài chú Macro. Cũng tạm ổn, trong mạng Lan nếu xem ở chế độ "Read only" file sẽ đóng khi save hoặc close, "save as" cũng tiêu luôn.
Các bác xem và giúp để em hoàn thiện.

Tuyệt vời nữa nếu khởi động file này thì Macro Security luôn chọn Low (em đã tìm trên diễn đàn rồi nhưng ko thấy như ý!)
anh ơi cho hỏi có cách nào đặt mật khẩu cho nó không?
 

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

Back
Top Bottom