保存时用数据保护单元格,打开后剩余的单元格应可编辑

问题描述

我正在制作一张Excel表,以跟踪设备的发行。我希望团队中的所有成员都可以编辑工作表,但是一旦他们填写了字段并保存,输入数据的那些字段应被锁定。后来,没有人应该能够编辑其中包含数据的行,但应该能够编辑空行并保存。有人可以指导我吗?

sheet

致谢

解决方法

这应该让您入门。

使用Excel structured table保留数据,以添加用户要填充的空行

第1步

将表命名为TableIssuances(或与下面的代码匹配的名称)

ExcelTable


第2步

将此代码添加到ThisWorkbook模块中:

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel As Boolean)
    Module1.LockTableFilledCells
End Sub

Private Sub Workbook_Open()
    Module1.LockTableFilledCells
End Sub

将代码放在哪里: WhereToPutWorkbookCode


第3步

并将其添加到标准模块中(阅读代码的注释并对其进行调整以适合您的需求):

Option Explicit
Option Private Module
Public Sub LockTableFilledCells()

    ' Define the sheet holding the table
    Dim targetSheet As Worksheet
    Set targetSheet = ThisWorkbook.Worksheets("Sheet1")
    
    
    
    ' Unprotect the sheet
    Dim sheetPassword As String
    sheetPassword = ""
    targetSheet.Unprotect Password:=sheetPassword
    
    ' Define the table holding the data
    Dim targetTable As ListObject
    Set targetTable = Range("TableIssuance").ListObject
    
    ' Loop through rows and check if No. is filled
    Dim tableCell As Range
    For Each tableCell In targetTable.ListColumns(1).DataBodyRange.Cells
        
        ' Lock the row cells if No. column has a value
        targetTable.ListRows(tableCell.Row - targetTable.HeaderRowRange.Row).Range.Locked = (tableCell.Value <> vbNullString)
    
    Next tableCell

    targetSheet.Protect Password:=sheetPassword

End Sub

将代码放在哪里: WhereToPutModuleCode

注意:如果您需要向表中添加更多行(由于工作表将被锁定,因为它们不会自动添加),只需解锁工作表并在保存之前添加它们即可。

尝试一下,让我知道它是否有效