Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA复制Excel工作表将失去保护_Vba_Excel_Password Protection - Fatal编程技术网

使用VBA复制Excel工作表将失去保护

使用VBA复制Excel工作表将失去保护,vba,excel,password-protection,Vba,Excel,Password Protection,是否有一种更安全的方法可以保护excel工作表,而无需将密码嵌入带有工作表的vba代码中。保护代码?所需的功能是使用宏复制excel工作表并保留保护,使公式保持隐藏状态 两个模板工作表具有隐藏公式。这些工作表上的复制保护允许用户执行除编辑对象和编辑场景之外的所有操作 工作表需要分组功能,这需要VBA代码(添加到工作簿_Open)来设置工作表。Protect UserInterfaceOnly:=对于任何具有ProtectedContents=True和.EnableOutlineing:=Tru

是否有一种更安全的方法可以保护excel工作表,而无需将密码嵌入带有工作表的vba代码中。保护代码?所需的功能是使用宏复制excel工作表并保留保护,使公式保持隐藏状态

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

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

使用excel界面复制任一受保护的工作表都可以保持对副本的保护。在VBA代码中复制图纸会导致新图纸没有保护

我担心的是,尽管在excel 2010中使用安全密码保护代码,但通过在其他软件中打开文件,代码和嵌入的密码很容易显示。有没有一种更安全的方法来保护工作表而不在代码中嵌入密码


参考资料:

从本质上讲,Excel安全性并不特别强。保护功能的存在主要是为了防止非专业用户犯意外错误。然而,任何有决心和能力的人都不会花太长时间来破解你设置的任何安全措施。举一个简单的例子,看看这里投票最多的一个问题:

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

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

如果您对这种级别的安全性感到满意,并且对您的工作簿不会成为确定用户的攻击目标感到满意,那么您就不必太担心将保护密码存储在代码本身中。但是,至少有两种简单的方法可以使其不太可见(如果用户意外按下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”).Cells(1,1).Value中

正如我所说的——这些都不是保护敏感数据和formulæ的完美方法:但是,如果你的目标只是阻止临时用户犯错误,或者在他们不应该的地方乱翻,那么他们就会完成这项工作

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

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

然后根据需要调用它。您甚至可以将函数命名为其他稍微隐晦的名称,而不是“pw”等等。

注意工作表中设置了保护,因此不容易绕过。如果用户禁用宏,保护仍然存在,但他们禁用了扩展/折叠分组行/列的增强功能。由于现在有多个代码实例需要密码,我当然不满意这种安全级别,因此寻求更好的方法你的建议都是有用的尝试,我倾向于考虑问题的答案。在XLSEEtVIELY隐藏的哈希代码或计算密码的整个表格看起来是可行的,所以密码不容易发现。