Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
VBA Excel工作表\u更改阻止更新_Excel_Vba - Fatal编程技术网

VBA Excel工作表\u更改阻止更新

VBA Excel工作表\u更改阻止更新,excel,vba,Excel,Vba,如果不满足某个条件,工作表\u change是否可以通过退出sub来不处理挂起/已经发生的用户更新?我有一个日志系统,不希望用户一次删除多个单元格,因为我的代码一次处理一个单元格的更新-最终应该改进代码以允许这样做。但与此同时: Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Selection.Count > 1 Then MsgBox ("please delete items one at a ti

如果不满足某个条件,
工作表\u change
是否可以通过退出sub来不处理挂起/已经发生的用户更新?我有一个日志系统,不希望用户一次删除多个单元格,因为我的代码一次处理一个单元格的更新-最终应该改进代码以允许这样做。但与此同时:

 Private Sub Worksheet_Change(ByVal Target As Excel.Range)

 If Selection.Count > 1 Then
   MsgBox ("please delete items one at a time")
   Exit Sub
 End If
这将显示msgbox ok,但如果选择了多个单元格,则会继续删除选择中所有单元格的内容。然后,日志系统会丢失删除的内容

好的,尝试到达“最终目的地”以回应@Gary的学生回答,因为删除多个单元格并不违法

部分使用@binil的解决方案使我获得了这个伪代码,但我没有足够的能力来完成它(范围内的单元格可能是非连续的)


事情发生后,你不能阻止它。然而:

If Selection.Count > 1 Then
   MsgBox ("please delete items one at a time")
   ActiveWorkbook.Saved = True
   ActiveWorkbook.Close
 End If

将防止保存非法更改。

您可以拥有另一张工作表(设置
Visible=xlSheetVeryHidden
,这样用户就不能通过常规取消隐藏过程来显示它),这是您工作表的克隆。然后,无论何时在
工作表\u Change
事件中,您都可以检查验证条件。如果您的条件失败,您将从克隆工作表中获取旧值,如果您通过验证,那么您将像正常情况一样写入常规工作表,并将写入的内容复制到克隆工作表中

然后集中精力到达“最终目的地”
If Selection.Count > 1 Then
   MsgBox ("please delete items one at a time")
   ActiveWorkbook.Saved = True
   ActiveWorkbook.Close
 End If