EXCEL中利用VBA一次性撤销与保护多个工作表的问题?

保护所有工作表代码:
Sub ProtectAll()Dim sht As WorksheetFor Each sht In Worksheetssht.Protect Password:="123"NextEnd Sub
撤销所有保护代码:
Sub UnProtectAll()Dim sht As WorksheetFor Each sht In Worksheetssht.Unprotect Password:="123"NextEnd Sub
问题来了,当运行保护所有工作表时没有什么问题,但是当撤销工作表时却不需要再输密码了,请各位大神予以修改一下代码,使撤销工作表时弹出密码输入窗口,如果密码输入正确则取消保护所有工作表,如果密码输入错误,则提示“密码错误!”,然后单击“确定”取消。

'撤销所有保护代码:
Sub UnProtectAll()
Dim sht As Worksheet
myNum = Application.InputBox("请输入密码:", "撤销所有保护")
If myNum = "123" Then
For Each sht In Worksheets
sht.Unprotect Password:="123"
Next
Else
MsgBox "密码错误!"
End If
End Sub


温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-03
呃,这样的话,只能通过窗体来过渡了。追问

你好,我现在就是做了两个窗体来承载上面两个宏,问题是,第一个还可以,第二个就不行了,因为取消保护时不需要输入密码就能取消了,所以您能否帮我修改下代码?

追答

呃,你说的应该是模块吧……
在窗体上画一个文字框
然后在画一个按钮
双击按钮
Private Sub CommandButton1_Click()
dim mima as string
Dim sht As Worksheet
mima="123"
if textbox1.text=mima then
For Each sht In Worksheets
sht.Unprotect Password:="123"
Next
else
msgbox "密码错误"
end if
End Sub

或者
Sub UnProtectAll()
Dim sht As Worksheet,mima as string,inmima
mima="123"
inmima= inputbox("密码:")
if inmima=mima then
For Each sht In Worksheets
sht.Unprotect Password:=mima
Next
else
msgbox "密码错误"
end if
End Sub

第2个回答  2014-01-03
Sub UnProtectAll()
    Dim sht As Worksheet
    For Each sht In Worksheets
        sht.Unprotect
    Next
End Sub

Sub ProtectAll()
    Dim sht As Worksheet
    For Each sht In Worksheets
        sht.Protect Password:="123"
    Next
End Sub

追问

如果把那个PASSWORD 去掉的话,就要每个工作表都输入一次密码来解锁啦,那么这样的话用宏就没意义了,我想要的效果是,只输入一次密码,就能解开所有工作表的密码~~嘻嘻

追答Sub UnProtectAll()
    Dim sht As Worksheet
    Dim sPwd As String
    Dim bln As Boolean
    On Error GoTo MyErr
    bln = False
    sPwd = InputBox("请输入密码!")
    For Each sht In Worksheets
        sht.Unprotect Password:=sPwd
        GoTo MySuccess
MyErr:
    bln = True
MySuccess:
    If bln Then
        MsgBox "密码错误!"
        Call ProtectAll
        exit sub
    End If
    Next
End Sub

Sub ProtectAll()
    Dim sht As Worksheet
    For Each sht In Worksheets
        sht.Protect Password:="123"
    Next
End Sub