在受保护的工作表中无法识别公共密码

时间:2018-09-13 12:26:05

标签: excel vba passwords

我在Module1中有子“ ProtectAllSheets”,在Sheet1对象中有另一个,这意味着如果有#REF,则删除整个行! Sheet1的C列中有错误。当工作表受到保护时,它可以正常工作...但是当我关闭工作簿并再次打开它(仍受保护)时,尽管它是“ UserInterface = True”,但它不会删除带有错误的行。如果我取消保护床单,则可以正常工作。看来,一旦我关闭工作簿,某些信息就会“以某种方式”丢失……我只是无法理解代码到底有什么问题。 显式期权 公共pwd1作为字符串,pwd2作为字符串 子ProtectAllSheets() 昏暗的工作表   pwd1 = InputBox(“输入密码”,“”)     如果pwd1 =“”然后退出Sub   pwd2 = InputBox(“再次输入密码”,“”)     如果pwd2 =“”然后退出Sub     '检查两个密码是否相同     如果InStr(1,pwd2,pwd1,0)= 0或_     InStr(1,pwd1,pwd2,0)= 0然后     MsgBox“请输入相同的密码。”,vbInformation,“”       退出子     万一 对于ActiveWorkbook.Sheets中的每个ws     如果ws.ProtectContents = False = True,则       ws.Protect密码:= pwd1,UserInterFaceOnly:= True     万一         下一个ws MsgBox“表格受到保护。” 结束子 显式期权 子Worksheet_Activate() 昏暗工作表 点心只要 设置sh = ActiveSheet     对于c = 400至2步骤-1         如果IsError(Cells(c,3))然后          行(c).EntireRow.Delete         万一     下一个c 结束子

1 个答案:

答案 0 :(得分:0)

好吧民间,适合那些可能遇到类似问题的人。 我知道这不是最好的解决方案,但可以。似乎UserInterFaceOnly功能没有保存在文件中,一旦关闭并重新打开工作簿,它就消失了。所以,这就是我所做的。 步骤1.删除子ProtectAllSheets() 步骤2.插入一个Workbook_Open过程。

现在...如果按下Alt + F11,仍然可以看到密码“ 1214”。我对此无能为力。

Sub Workbook_Open()

Dim ws As Worksheet
For Each ws In ActiveWorkbook.Sheets
      If Not ws.ProtectContents Then
      ws.Protect Password:=1214, UserInterFaceOnly:=True
      End If
        Next ws
        
    MsgBox "Sheets are protected."

End Sub

第3步。通过Worksheet_Activate()保留相同的Sub

Sub Worksheet_Activate()

Dim sh As Worksheet
Dim c As Long
Set sh = ActiveSheet

    For c = 400 To 2 Step -1
        If IsError(Cells(c, 3)) Then
            Rows(c).EntireRow.Delete
        End If
            Next c
End Sub