Excel 保护工作表以供手动输入,但允许通过userform输入、编辑和删除

Excel 保护工作表以供手动输入,但允许通过userform输入、编辑和删除,excel,vba,password-protection,Excel,Vba,Password Protection,我已经使用VBA在excel中创建了一个数据输入表单,我想保护te数据库工作表以进行手动输入,但允许通过VBA用户表单保存数据、编辑数据和删除数据或行。 我已经将下面写的代码进行了编码,以保护该表 Sub Workbook_Open() Worksheets("Database").Protect Password:=True, UserinterfaceOnly:=True End Sub 它工作正常,但一段时间后,它给我运行时错误1004。 除此之外,它不允许我使用删除

我已经使用VBA在excel中创建了一个数据输入表单,我想保护te数据库工作表以进行手动输入,但允许通过VBA用户表单保存数据、编辑数据和删除数据或行。 我已经将下面写的代码进行了编码,以保护该表

Sub Workbook_Open()
Worksheets("Database").Protect Password:=True, UserinterfaceOnly:=True
End Sub
它工作正常,但一段时间后,它给我运行时错误1004。
除此之外,它不允许我使用删除按钮删除以前的数据。当您使用VBA用户表单编辑工作表时,工作表需要暂时取消保护。您可以这样做:

' Unprotect
Sheets("SHEET").Unprotect password:="PASSWORD"
'
'your code here
'
' Protect
Sheets("SHEET").protect password:="PASSWORD"
删除受保护工作表上的行
  • 如果准备解锁整行,则可以使用以下代码准备工作表
  • 工作簿_Open
    事件代码中不使用它;这只是一些准备工作表的代码
  • 注意
    AllowDeletingRows:=True
  • 但是,如果未解锁所有单元格,则无法删除行
  • 行(与列类似)的问题是,如果删除一行,则下一行“落在已删除行的位置”。例如,如果在使用示例代码后,用户删除了任何允许的行,那么他将无法删除第50行,这可能正是您所需要的行为
代码

Option Explicit

' Remove this Sub when done.
Sub Allowed()
    
    Const AllowedRows As String = "2:50"
    Const pWord As String = "123"
    
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Database")
    
    With ws
        .Unprotect pWord
        .Cells.Locked = True ' Lock all cells.
        .EnableSelection = xlNoRestrictions
        .Rows(AllowedRows).Locked = False ' Unlock allowd rows.
        .Protect Password:=pWord, DrawingObjects:=True, Contents:=True, _
          Scenarios:=True, AllowDeletingRows:=True
    End With

End Sub