Excel VBA设计用于防止保存时编辑具有值的单元格时出现问题
我正在处理电子表格中的一个表格,多个用户将编辑该表格。我们遇到过这样的问题:人们不小心粘贴到了其他条目上,或者将半行移到了几列上。我想保护每个有值的单元格,或者允许编辑每个没有值的单元格 我尝试过使整个表格可编辑,然后用其中的值锁定单元格。这似乎没什么作用,因为我无论如何都可以编辑值Excel VBA设计用于防止保存时编辑具有值的单元格时出现问题,excel,vba,Excel,Vba,我正在处理电子表格中的一个表格,多个用户将编辑该表格。我们遇到过这样的问题:人们不小心粘贴到了其他条目上,或者将半行移到了几列上。我想保护每个有值的单元格,或者允许编辑每个没有值的单元格 我尝试过使整个表格可编辑,然后用其中的值锁定单元格。这似乎没什么作用,因为我无论如何都可以编辑值 Private子工作簿\u保存前(ByVal SaveAsUI为布尔值,Cancel为布尔值) 将NewEditRange设置为范围 将此工作表设置为工作表 作为范围的Dim数据表 将CurrentEditRang
Private子工作簿\u保存前(ByVal SaveAsUI为布尔值,Cancel为布尔值)
将NewEditRange设置为范围
将此工作表设置为工作表
作为范围的Dim数据表
将CurrentEditRange设置为允许的范围
小电流单元作为量程
设置ThisSheet=ActiveWorkbook.Worksheets(“数据”)
Set DataTable=thisheet.Range(“表1”)
Set NewEditRange=thisheet.Range($A$1)
此工作表。取消保护
对于此Sheet.Protection.AllowEditRanges中的每个CurrentEditRange
CurrentEditRange.Delete
下一个
对于DataTable中的每个CurrentCell
如果CurrentCell.Value=”“,则
Set NewEditRange=Application.Union(NewEditRange,CurrentCell)
如果结束
如果CurrentCell.Value=“0”,则
Set NewEditRange=Application.Union(NewEditRange,CurrentCell)
如果结束
下一个
ThisSheet.Protection.AllowEditRanges.Add标题:=“新建编辑范围”,范围:=新建编辑范围
这张纸。保护
端接头
我希望这样可以解锁工作表,删除所有AllowEditRange对象,然后将表中的每个空白单元格添加到NewEditRange,然后创建一个包含NewEditRange的新AllowEditRange,然后保护工作表。
相反,它通过第14行左右对单元格进行AllowEditRange,我仍然可以编辑不在该范围内的单元格。您应该始终使用'Option Explicit' 我对Application.Union在NewEditRange上运行有一些怀疑,如果它仍然是空的话。您应该初始化它,并且可能必须拆分NewEditRange为nothing或nothing的情况
(由于rep的原因,无法进行评论)好的,所以问题是您无法保护表中的单元格。时期如果您对添加此功能感兴趣,请转到并投票。您在哪里定义了CurrentEditRange和CurrentCell?我在For循环中隐式定义了它们。@JolnarIndustries很挑剔,但它是否应该为DataTable.Cells中的每个CurrentCell读取
?(我认为.Cells
是默认值,但您也可以有.Rows
,Columns
,区域
,等等)更重要的是,您是否应该使用此工作簿
而不是活动工作簿
?您只需要1If
语句:If CurrentCell.Value=”“或CurrentCell.Value=“0”,那么如果运行此代码,工作表是否实际受到保护?如果你用F8一行一行地走,它会做任何意想不到的事情吗?表外的一切都得到了很好的保护。我还没有尝试过一步一步地去做,所以可能只是在昏暗之后添加Set-NewEditRange=Range($A$1)或类似的东西?Set-NewEditRange=Nothings,太匆忙了:当然,然后你需要区分“如果NewEditRange什么都不是,那么。。。其他的结束如果。