防止macros为传递保护自毁文件中断
我决定创build一个通过保护的文件,将三个错误的密码input后自毁。 macros运行时打开的文件(用户窗口popupinput框字段),但弱点是Ctrl-Break允许停止macros并获得访问代码。
有什么办法来禁用/防止在特定工作簿中的Break选项(最好是通过VBA)?
如果你有兴趣,我可以根据要求提供macros。
UPD:这是我正在使用的macros(基于date)。
Private Sub Workbook_Open() If Date > Cdate("30/03/2015") Then WARNING.Show End If End Sub
这部分代码分配给UserForm“WARNING”的“Ok”和“Cancel”button。
Public i As Integer Public b As Integer Sub setib() i = 2 - b b = b + 0 End Sub Private Sub CnclBtn_Click() WARNING.Hide With ThisWorkbook .Saved = True .Close False End With End Sub Private Sub OKBtn_Click() Call setib Dim Pass As String: Pass = "*your pass*" Dim PassInput As String: PassInput = WARNING.PassField.Text If PassInput = Pass Then MsgBox "Password is correct" GoTo Safe: Else If b < 2 Then MsgBox "Password is incorrect. " & i & " attempts left." Else MsgBox "No More attempts" End If If b = 2 Then WARNING.Hide GoTo Destroy: Else WARNING.PassField.Value = vbNullString WARNING.PassField.SetFocus b = b + 1 GoTo EndSub: End If End If Safe: ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule.DeleteLines 1, _ ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule.CountOfLines WARNING.Hide GoTo EndSub: Destroy: With ThisWorkbook .Saved = True .ChangeFileAccess xlReadOnly Kill .FullName .Close False End With EndSub: Sheet1.Activate End Sub
您可以简单地密码保护VBA项目。 这将避免需要担心使用EnableCancelKey
的Application
级别设置。
虽然用户可以使用取消键“中断”,但是如果没有为VBA项目提供适当的密码,他们将无法查看代码。
在VBAProject 受保护的情况下 ,用户可以“中断”代码的执行,用户不能进入“break mode”,Excel应用程序将不会交互(所以用户将无法访问工作表) 。 此时,用户表单将被冻结在屏幕上,应用程序无响应。 用户然后有两个选项,我可以看到:
- 如果他们知道
Unload UserForm1
的名称 ,他们可以想象从VBE中的立即窗口中Unload UserForm1
。 所以,你应该为UserForm挑选一些他们不太可能猜到的名字。 如果他们这样做,他们将能够访问文件本身,但如果你给用友一个安全的名字,他们永远不会猜测它的正确。 - 否则,他们是SOL,除非他们按Ctrl + Alt Del ,并杀死Excel应用程序。
注意:无论是工作表还是VBAProject(或两者),Excel密码都可以被意图破解的人破解,并且只是防止意外损坏或操纵数据的一个很好的措施。