我希望在打开工作簿时立即取消保护,如果它在上次关闭时受到保护。我在Open事件的最开始处放置以下代码:
If ThisWorkbook.ProtectStructure = True Then
Call ThisWorkbook.Unprotect("openpassword")
End If
同样,我想在工作簿关闭之前保护它。所以我将以下代码放在beforeClose事件的最后:
If ThisWorkbook.ProtectStructure = False Then
Call ThisWorkbook.Protect("openpassword",True, False)
End If
ThisWorkbook.Save
这两个都没有作品!这意味着,如果工作簿在打开时已经受到保护,则不会执行Open事件中的任何代码。甚至不是无保护的电话!
同样,在beforeClose事件中,除保护部分及其后面的任何代码外,执行保护部分之前的所有代码 。我已经确认将它放在beforeClose事件中的不同位置。
有人可以帮我这个吗?
我想要这样做的其他解释:工作簿正在具有不同授权访问级别的用户之间共享。大多数用户在允许仅处理某些工作表时会面临受保护的工作簿。因此,根据最后使用者的情况,可以在受保护状态或未受保护状态下关闭工作簿。如果在使用过程中不受保护,我需要在关闭后立即对其进行保护,以便下一个未经授权的用户打开受保护的工作簿。
答案 0 :(得分:0)
你能检查一下这些事件是否正在发射?尝试在每个事件处理程序的开头放置一个Stop来查看它们是否被调用。如果代码没有执行,如果将其保存为可信文档会发生什么?
只需几件事: 为什么不为每个人关闭时强制保护,只允许在为某些人打开时不进行保护?
您如何确定哪些用户可以取消对工作簿的保护?
您没有将工作簿保存为共享工作簿,对吧?这是一个普通的工作簿,但由不同的用户访问。共享工作簿有点保护。
答案 1 :(得分:0)
请尝试以下方法:
Dim sht As Worksheet
For Each sht in ActiveWorkbook.worksheets
If sht.Protection = True Then
sht.Unprotect("openpassword")
End If
Next sht
最后也是如此:
Dim sht as Worksheet
For Each sht in ActiveWorkbook.Worksheets
If sht.Protection = False Then
sht.Protect ("openpassword", True, False)
End If
Next sht
在excel中 - 据我所知 - 直接保护整个工作簿是不可能的,但你必须保护每张工作表。
你至少可以尝试一下,如果它有效,我也很高兴:)
CU Kath