问题描述
我已使用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