工作表重命名时macros不起作用

我在需要保护的工作表上使用macros。 这是macros观的:

wksPartsDataEntry.Unprotect Sheet11.Unprotect Application.ScreenUpdating = False Dim historyWks As Worksheet Dim inputWks As Worksheet Dim nextRow As Long Dim oCol As Long Dim myCopy As Range Dim myTest As Range Dim lRsp As Long Set inputWks = wksPartsDataEntry Set historyWks = Sheet11 'check for duplicate order ID in database If inputWks.Range("CheckID2") = True Then lRsp = MsgBox("Clinic ID already in database. Update record?", vbQuestion + vbYesNo, "Duplicate ID") If lRsp = vbYes Then UpdateLogRecord Else MsgBox "Please change Clinic ID to a unique number." End If Else 'cells to copy from Input sheet - some contain formulas Set myCopy = inputWks.Range("OrderEntry2") With historyWks nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row End With With inputWks Set myTest = myCopy.Offset(0, 2) If Application.Count(myTest) > 0 Then MsgBox "Please fill in all the cells!" Exit Sub End If End With With historyWks With .Cells(nextRow, "A") .Value = Now .NumberFormat = "mm/dd/yyyy hh:mm:ss" End With .Cells(nextRow, "B").Value = Application.UserName oCol = 3 myCopy.Copy .Cells(nextRow, 3).PasteSpecial Paste:=xlPasteValues, Transpose:=True Application.CutCopyMode = False End With 'clear input cells that contain constants With inputWks On Error Resume Next With myCopy.Cells.SpecialCells(xlCellTypeConstants) .ClearContents Application.GoTo .Cells(1) ', Scroll:=True End With On Error GoTo 0 End With End If Application.ScreenUpdating = True wksPartsDataEntry.Protect Sheet11.Protect End Sub 

macros工作正常。 但是,我会将该文件分发给其他想要使用密码来保护其表单的用户。 每个用户都希望使用不同的密码。 在代码中添encryption码不是一个选项,因为该密码是唯一的,我希望其他用户能够在保护时添加自己的密码。 是否存在可以执行如下操作的代码:

 Sub Macro1() wksPartsDataEntry.Unprotect Password: (anything a user might choose as a password) Sheet11.Unprotect: (anything a user might choose as a password) 

所以最终我的macros将根据用户自己select的密码进行解保护和重新保护,而用户不必更改任何代码。

希望我已经清楚了,谢谢你的回答!

是的 – 你应该在excel帮助中查找不受保护的内容:

wksPartsDataEntry.Unprotect(password)是可能的,其中password是一个可选参数,所以你可以不发表。

为了做到你所需要的,试试这个:

 Public Sub MyUnprotect() wksPartsDataEntry.Unprotect InputBox( _ prompt:="Please type your password to unprotect:", _ Title:="Unprotect") End Sub 

您也可以扩展这个保护 ,即通过将给定的密码保存为variables。

如果你想让星星隐藏密码input,你将不得不创build你自己的UserForm,而不是InputBox。 在那里你可以设置一个隐藏input的input栏。