首页 文章

复制Excel表与VBA失去保护

提问于
浏览
0

有没有更安全的方法来保护Excel工作表,而无需使用sheet.Protect代码将密码嵌入到vba代码中?所需的功能是使用宏复制Excel工作表并保留保护,以便公式保持隐藏状态 .

两个模板表有隐藏的公式 . 这些工作表上的复制保护允许用户执行除编辑对象和编辑方案之外的所有操作

工作表需要分组功能,需要VBA代码(添加到workbook_Open)来设置sheet.Protect UserInterfaceOnly:=对于任何具有ProtectedContents = True和.EnableOutlining:= True的工作表的True . 除了DrawingObjects和Scenarios之外,代码中的所有其他Protect属性都设置为True .

使用excel接口复制受保护的工作表可以保护副本 . 在VBA代码中复制工作表会导致新工作表无法保护 .

我担心的是,尽管在excel 2010中使用安全密码保护代码,但通过在其他软件中打开文件可以轻松显示代码和嵌入密码 . 是否有更安全的方法来保护工作表而不在代码中嵌入密码?

参考:Retaining Existing Excel Worksheet Protection When Enabling Grouping

1 回答

  • 1

    从本质上讲,Excel安全性并不是特别强 . 保护功能主要是为了防止非专业用户犯下无意的错误 . 但是,任何坚定而有能力的人不会花费太长时间来破解/破解您实施的任何安全措施 . 作为一个多么容易的例子,请看一下这里最投票的问题之一:

    Is there a way to crack the password on an Excel VBA Project?

    因此,即使您保护实际的VBA项目,也可以相对简单地解决这个问题 .

    在您的特定情况下,您正在使用Worksheet_Open事件来应用保护 - 但是,这是世界上最容易绕过的事情,只需在关闭事件后通过另一个工作簿中的子打开相关工作簿 . 您可能还有一些用户的宏安全设置未自动启用,如果他们忽略“启用宏?”当他们打开您的工作簿时提示,Open事件永远不会触发 .

    如果您对这种安全级别感到满意 - 并且对您的工作簿不会成为确定用户的黑客目标感到高兴 - 那么您不必过于担心将保护密码存储在代码本身中 . 但是,有几种简单的方法可以至少使其不太明显(如果用户意外按下Alt F11,或者错误导致VBE打开:

    不要使用纯文本在代码中键入密码,而是使用Chr()函数 . 所以代替:

    Dim pw As String
    pw = "hello!"
    

    ......你可以写:

    Dim pw As String
    pw = Chr(104) & Chr(101) & Chr(108) & Chr(108) & Chr(111) & Chr(33)
    

    另一种方法是将密码存储在可见性设置为xlVeryHidden的另一个工作表的单元格(例如A1)中,并引用表格(“HiddenSheetName”) . 单元格(1,1).Value .

    正如我所说 - 这些并不是保护敏感数据和公式的完美方式:但是如果你的目标只是阻止偶然用户犯错误,或者在他们不应该做的地方闲逛,那么他们就会完成这项工作 .

    附加:对于需要密码的多个实例,我自己使用类似的东西:

    Function pw() As String
        pw = Chr(104) & Chr(101) & Chr(108) & Chr(108) & Chr(111) & Chr(33)
    End Function
    

    然后根据需要调用它 . 你甚至可以将这个函数命名为有点神秘的东西,而不是“pw”等 .

相关问题