2010 Excel VBA-如果工作簿已受保护,则结束子问题
我有一个按钮,它使用下面的sub-ProtectAll_管理代码 管理员已保护工作簿时,如果不检查工作簿是否已被保护,则会发生错误。因此,我需要一个消息框来告诉管理员工作簿已经受到保护。下面的代码将向我提供一条消息,说明它已受到保护,即使它尚未受到保护。如果我去掉下面几行代码,它将正常运行,但我又回到了原点,它将出错,因为一个列已经对我的调用mcr\u hiderowscollans\u ADMIN隐藏。i、 我希望这个子程序是分开的,因为有很多工作表需要隐藏列和行2010 Excel VBA-如果工作簿已受保护,则结束子问题,vba,excel,Vba,Excel,我有一个按钮,它使用下面的sub-ProtectAll_管理代码 管理员已保护工作簿时,如果不检查工作簿是否已被保护,则会发生错误。因此,我需要一个消息框来告诉管理员工作簿已经受到保护。下面的代码将向我提供一条消息,说明它已受到保护,即使它尚未受到保护。如果我去掉下面几行代码,它将正常运行,但我又回到了原点,它将出错,因为一个列已经对我的调用mcr\u hiderowscollans\u ADMIN隐藏。i、 我希望这个子程序是分开的,因为有很多工作表需要隐藏列和行 If ActiveWork
If ActiveWorkbook.ProtectStructure Then End
MsgBox ActiveWorkbook.Name & " is already protected.", _
vbCritical
Exit Sub
下面是完整的代码,我非常感谢有人的敏锐眼光:
Sub ProtectAll_ADMIN()
Dim S As Object
If ActiveWorkbook.ProtectStructure Then End
MsgBox ActiveWorkbook.Name & " is already protected.", _
vbCritical
Exit Sub
' To Hide all rows and columns for editing
Call mcr_HideRowsColumns_ADMIN
Dim pWord1 As String, pWord2 As String
pWord1 = InputBox("Please Enter the password")
If pWord1 = "" Then Exit Sub
pWord2 = InputBox("Please re-enter the password")
If pWord2 = "" Then Exit Sub
'Make certain passwords are identical
If InStr(1, pWord2, pWord1, 0) = 0 Or _
InStr(1, pWord1, pWord2, 0) = 0 Then
MsgBox "You entered different passwords. No action taken!"
Exit Sub
End If
For Each ws In Worksheets
ws.Protect Password:=pWord1
Next
MsgBox "All Sheets are Protected."
Exit Sub
'-------------------------------------------
Sheets("Home").Select
Range("A1").Select
End Sub
有什么想法吗?谢谢大家! 我稍微重新设计了您的代码:
Sub ProtectAll_ADMIN()
Dim ws As Worksheet
Dim pWord1 As String
Dim pWord2 As String
For Each ws In Worksheets
If ws.ProtectContents Then
MsgBox ActiveWorkbook.Name & " is already protected.", vbCritical
Exit Sub
End If
Next ws
' To Hide all rows and columns for editing
Call mcr_HideRowsColumns_ADMIN
pWord1 = InputBox("Please Enter the password")
If pWord1 = "" Then Exit Sub
pWord2 = InputBox("Please re-enter the password")
If pWord2 = "" Then Exit Sub
'Make certain passwords are identical
If InStr(1, pWord2, pWord1, 0) = 0 Or InStr(1, pWord1, pWord2, 0) = 0 Then
MsgBox "You entered different passwords. No action taken!"
Exit Sub
End If
For Each ws In Worksheets
ws.Protect Password:=pWord1
Next
MsgBox "All Sheets are Protected."
End Sub
我不知道你为什么用End?它不应该是这样的:如果是ActiveWorkbook.ProtectStructure,那么MsgBox ActiveWorkbook.Name&已经受保护,vbCritical Exit子端If@RADO感谢您的尝试,这实际上会给我一个编译错误:如果没有块,结束如果我重新设计并测试了您的代码,它会工作。以前不起作用的原因:您测试了工作簿保护,然后设置了工作表保护。这是两个不同的对象。正如@RADO所说,ProtectStructure只是告诉您工作表的顺序是否受到保护,如果受到保护,您将结束代码执行。如果不是,你会显示一条消息说它是,然后返回到任何调用子例程的地方。这很好。我还尝试使用了Else,并在末尾添加了EndIf,这使它也能正常工作,但我认为前面提到的内容非常干净,所以再次感谢您。