Excel 我该如何处理错误:“;数据透视表中不存在此名称的项。”;

Excel 我该如何处理错误:“;数据透视表中不存在此名称的项。”;,excel,vba,error-handling,pivot-table,userform,Excel,Vba,Error Handling,Pivot Table,Userform,因此,我有一个数据透视表,它是通过userform中的commandbox修改的。如果用户键入的名称不在列表中,我会得到错误 数据透视表中不存在此名称的项。是否将名称1重命名为名称2 其中,Name1是列表上的人,Name2是不在列表上的人 实际上,我得到的错误是commandbox修改的数据透视表数量的5倍 我尝试了以下方法: On Error Resume Next 我希望这只是“跳过”这个问题。不,那没用,哈哈 虽然理想情况下,我希望创建一条自定义错误消息,该消息只弹出一次(而不是5次)

因此,我有一个数据透视表,它是通过userform中的commandbox修改的。如果用户键入的名称不在列表中,我会得到错误

数据透视表中不存在此名称的项。是否将名称1重命名为名称2

其中,
Name1
是列表上的人,
Name2
是不在列表上的人

实际上,我得到的错误是commandbox修改的数据透视表数量的5倍

我尝试了以下方法:

On Error Resume Next
我希望这只是“跳过”这个问题。不,那没用,哈哈

虽然理想情况下,我希望创建一条自定义错误消息,该消息只弹出一次(而不是5次),并告诉用户输入他们所在部门/班次的名称。(我的commandbox使用的)列表总体上包含每个部门每个班次的每个人,但并非所有人都在数据透视表中,因此,仅b/c他们在列表中我的commandbox用户,他们不一定在数据透视表中。我知道这很让人困惑,但我必须这样做:所有班次都在使用相同的界面。我没有访问部门、轮班等人员的列表。我只有每个人的主列表,所以我的commandbox必须使用它

我仍然是VBA的“新手”,但一般来说,我对错误处理并不陌生。我知道如何用Java处理这个问题,但不知道如何用VBA

这是代码中失败的部分:

Range("D2").Select 
ActiveCell.Value = frmInd_Productivity_TrackerPS.ComboBox1.Value
ActiveSheet.Range("B1").Select
ActiveCell.Value = Range("F2").Value
更新: 我尝试在编码的最顶端添加以下内容,但这只会使错误框弹出,即使该人员在数据透视表中并且该操作正常!?!不知道为什么在没有错误的情况下会弹出消息框

On Error GoTo ErrHandler:

ErrHandler:
' error handling code
Resume ErrMessage:

ErrMessage:
MsgBox "Name not found in this Department. Please Enter a New Name from this Department."
Exit Sub

更新:弹出的框似乎是“警报”,而不是“错误”???如果我禁用所有警报,那么它不会弹出,但我也没有机会警告用户他们输入的名称不正确,它会自动重新分配内容(我不想要!!!)。有什么想法吗?我可以使用类似于“警惕转到”的代码吗?

我找不到一种方法来做我想做的事。不过我确实找到了解决办法

问题已解决(使用创可贴):


我制作了一张新的表格,称为组合框中的信息。它转换了数据,然后用它来检查数据是否出现在我的数据透视表中。然后,我根据变量是否找到它(存储在一个新变量中)为它分配了一个结果。如果结果为1,则“If”语句将执行整个程序块。如果结果为0(意味着在数据透视表上找不到名称),则会弹出一条消息,说明要更改名称并退出sub。希望这对以后的人有所帮助。

您需要将
放在错误恢复下一步的顶部
上,Excel才能跳过错误消息

子函数名()
出错时继续下一步

是了解VBA错误处理最佳实践的重要来源。关于您的案例,我认为您应该在了解错误处理的工作原理后自己找到解决方案。也许您可以弹出一个对话框,要求为数据透视添加一个附加名称(而不是删除某个现有名称),或者您可以创建一个布尔值,该值仅在出现错误时变为True,并在过程结束时声明“对不起,您的名称不在数据透视表中”。我想这取决于你如何处理它。在你发布链接之前,我已经读过了,但是我真的有点迷路了,先生。我只想让它弹出一个框,告诉用户在他们的部门中输入一个名称,如果该名称不在数据透视表中。我会尝试一些东西,但我希望能得到一些指导。:)我的主要问题是,我不知道如何让它“跳过”那个错误并实际转到下一个错误?你能告诉我怎么做吗?在Java中,Try/Catch块在处理错误后自动进入下一级。我无法让VBA“抛出”错误并继续运行。您的数据透视表位于哪里?哪些单元格?我总共有5个数据透视表,所有数据透视表都由commandbox修改。所以每一个都会抛出一个错误,在一行中给我5个错误,要求我将数据透视表中的一个人重命名为另一个人的名字。B1是我的数据透视表筛选框。我必须修改组合框中的值,即“F2”结束时的值。换句话说,“F2”是我的成品,它被“复制”到数据透视表过滤器框中(我知道你实际上不能在那里“复制”它,它只是将值设置为“F2”)。我也许应该再次澄清,“下一步继续”似乎并没有跳过编码。也许我把“On Error Resume Next”作为第一行代码放错了位置?