Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA清除数据功能可保护以前未受保护的单元格_Excel_Vba - Fatal编程技术网

Excel VBA清除数据功能可保护以前未受保护的单元格

Excel VBA清除数据功能可保护以前未受保护的单元格,excel,vba,Excel,Vba,当我第一次打开工作簿时,我调用此函数以保护特定单元格区域和单元格不受用户影响: ' Sets protection on sheet Public Sub LockCells_TXN_CLIENT_ORDER_ENTRY() ActiveSheet.Unprotect Password:="abc" ActiveSheet.Cells.Locked = False ' Lock some cells here ActiveSheet.Protect Password:="abc"

当我第一次打开工作簿时,我调用此函数以保护特定单元格区域和单元格不受用户影响:

' Sets protection on sheet
Public Sub LockCells_TXN_CLIENT_ORDER_ENTRY()
  ActiveSheet.Unprotect Password:="abc"
  ActiveSheet.Cells.Locked = False
  ' Lock some cells here
  ActiveSheet.Protect Password:="abc"
End Sub
但是,在调用以下子例程以清除一系列行中的数据时:

Private Sub ClearData_Click()
  ' Declare some variables

  For currentRow = ActiveSheet.Range("STATUS_FIELDS").Row To totalRows
    ActiveSheet.Cells(currentRow, ActiveSheet.Range("STATUS_FIELDS").Column).Resize(1, 14).Clear
  Next currentRow
End Sub
未指定受保护的单元格现在变为受保护的单元格,这些单元格与受
ClearData\u Click()
函数影响的单元格完全相同


有人能给我解释一下为什么会发生这种情况以及如何避免这种情况吗?

您使用的
.Clear
导致了这个问题

请改用
.ClearContents
,或者在清除范围后重新设置锁定属性


.Clear
清除整个对象,包括将其锁定属性设置为false的部分。

只是一个简单的想法-不确定它是否有用-但是使用
ActiveCells
ActiveSheet
可能很危险,因为它可能会影响您不想做的事情。也许你可以限定你想要使用的确切的工作表和范围,从而避免代码中出现意外情况?@ScottHoltzman,嗨,Scott,你在哪里看到ActiveCells?我的错。这只是
ActiveSheet
。非常感谢你说得对。但是,我也设置了这个单元格的填充,所以我想重置
属性是唯一的选择?我会使用
.clearcontents
。这样,锁定的属性、填充以及对范围所做的任何其他操作都将保持不变。如果由于某种原因无法正常工作,请使用
.clear
并重置所有已清除的内容。