保护工作表以进行手动输入,但允许通过用户表单输入,编辑和删除

问题描述

我已使用VBA在excel中创建了数据输入表单,我想保护数据库表具有手动输入功能,但允许通过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"
,

删除受保护的工作表上的行

  • 如果您准备解锁整个行,则可以使用以下代码来准备工作表。
  • 不能用于Workbook_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