Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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_Error Handling_Alert_Pivot Table - Fatal编程技术网

Excel中是否有VBA用于“输入”;“处于警戒状态”;就像它为“你”所做的那样;关于错误;?

Excel中是否有VBA用于“输入”;“处于警戒状态”;就像它为“你”所做的那样;关于错误;?,excel,vba,error-handling,alert,pivot-table,Excel,Vba,Error Handling,Alert,Pivot Table,我发现,与数据透视表相关的弹出框实际上是一个“警报”框,而不是一个“错误”框。Excel是否有类似于“出错后转到”的任何类型的“警告后转到”: 我可以完全禁用此警报,但当用户输入数据透视表中未找到的错误名称时,我无法警告用户。这也会重新分配任务,我不想这样 通过数据验证防止警报 确保用户从预定义列表中提供名称的一种方法是使用。您可以让单元格根据动态范围提供自己的下拉列表。您可以从Excel的“数据”选项卡和/或通过以下方式进行设置。引用是“动态”的,因为如果引用范围更改,下拉列表也会随之更改;如

我发现,与数据透视表相关的弹出框实际上是一个“警报”框,而不是一个“错误”框。Excel是否有类似于“出错后转到”的任何类型的“警告后转到”:


我可以完全禁用此警报,但当用户输入数据透视表中未找到的错误名称时,我无法警告用户。这也会重新分配任务,我不想这样

通过数据验证防止警报

确保用户从预定义列表中提供名称的一种方法是使用。您可以让单元格根据动态范围提供自己的下拉列表。您可以从Excel的“数据”选项卡和/或通过以下方式进行设置。引用是“动态”的,因为如果引用范围更改,下拉列表也会随之更改;如果引用范围是表的一列,则列表将根据该列增长和收缩

验证失败时要采取的操作也可以自定义,包括输入消息和错误消息。使用VBA时的一个选项是禁用任何操作,而是使用验证的
属性在运行时确定操作。验证是在单元格值更改之前触发的,因此我猜它将继续发出警报


错误与警报(我们可以处理事件吗?
关于警报消息是否存在
On Error
等价物这一更一般的问题,我认为没有。VBA一开始就没有恒星错误处理
On Error
在消息框显示之前处理运行时错误,而不是在显示事件上,我认为没有任何VBA容易访问的事件是由消息框显示引起的

错误与警报(我们可以处理对象吗?

听起来你找到了
Application.DisplayAlerts=False
,我想这差不多就是你对警报所能做的。正如OP所提到的,最好是打开警报,但仍按程序检查警报。您可以通过使用
Err
对象来处理错误,但如果没有警报对象,我认为您不能通过警报来处理错误。

您可以检查每一次
工作表更改
,如果您不想要,则输出错误消息……我正在考虑如何实现这一点。。。。是否有一个好的“检查”来查看他们输入的名称是否是数据透视表上的名称之一?您可以循环这些名称。。。我需要在我的电脑上检查一下。。。但是应该有人能比我更快地解决这个问题。。。不过,请尽快再次检查此问题…问题已解决,使用循环将名称与数据透视表中的名称进行检查。然后给变量赋值一个结果。如果结果为1,则“If”语句将执行整个程序块。如果结果为0(意味着它没有在数据透视表上找到名称),那么它会弹出一条消息,说要更改名称并退出sub。独自操作始终是最好的解决方案:)我没有提到我的列表是公司中每个人的主列表,但只能输入来自部门的有效名称,我没有收到这些名字的清单。我必须通过一些非常迂回的方法来推断名称,这些方法反过来又来自数据透视表。我可以照你说的做,从数据透视表中创建一个动态范围???目前,我使用的方法是检查“名称”是否出现在数据透视表上,如果没有,则退出子项:)