Vô hiệu hóa chức năng Save As...

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,905
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

  • SUBTOTAL.rar
    116.2 KB · Đọc: 132
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

  • SUBTOTAL1.rar
    116.8 KB · Đọc: 39
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

  • DisableSaveAs.rar
    11.7 KB · Đọc: 154
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

  • DisableSaveAsPro.rar
    16.1 KB · Đọc: 141
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

  • DisableSaveAs_tam.rar
    13.9 KB · Đọc: 68
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:
Web KT
Back
Top Bottom