防止密码保护的自毁文件的宏中断

Prevent the macro break for pass-protected self-destructing file

我决定创建一个密码保护文件,该文件将在输入三次错误密码后自毁。宏在打开文件的情况下运行(弹出带有通行证输入字段的用户窗体),但弱点是 Ctrl-Break 允许停止宏并访问代码。

有什么方法可以 disable/prevent 中断特定工作簿中的选项(最好通过 VBA)?

如果你有兴趣,我可以根据要求提供宏。

UPD:这是我正在使用的宏(基于日期)。

Private Sub Workbook_Open()
    If Date > Cdate("30/03/2015") Then
        WARNING.Show
    End If
End Sub

这部分代码分配给用户窗体 "WARNING" 的 "Ok" 和 "Cancel" 按钮。

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 项目。这将避免需要担心 EnableCancelKeyApplication 级设置。

虽然用户可以 "break" 使用取消键,但如果不提供 VBA 项目的正确密码,他们将无法查看代码。

有了VBA项目保护,用户可以"break"执行代码,用户应该不能输入"break mode",并且 Excel 应用程序将无法交互(因此用户将 无法 访问工作表)。此时,用户窗体将冻结在屏幕上并且应用程序无响应。然后用户有两个选项,我可以看到:

  1. 如果他们知道用户窗体的名称,他们可以想象从 VBE 中的即时 window Unload UserForm1。因此,您应该为 UserForm 选择一些他们不太可能猜到的名称。如果他们这样做,他们将能够访问文件本身,但如果您为 UF 提供安全名称,他们将永远猜不对。
  2. 否则,它们是 SOL,除非它们 Ctrl+AltDel,并且终止 Excel 应用程序进程。

注意: Excel 密码,无论是在工作表上还是在 VBA 项目(或两者)上,任何有意这样做的人都可以破解,并且只是防止无意中损坏或操纵数据的好方法。