gpt4 book ai didi

excel - 关于没有错误的错误 VBA 行事件

转载 作者:行者123 更新时间:2023-12-04 22:18:07 25 4
gpt4 key购买 nike

我有一个贯穿多个数据透视表的宏。如果该选项不可用,则在此选项中,例如我正在尝试选择数字 50,但这不在数据透视表数据中。我希望它选择空白。
我已经完成了 On error GoTo这在代码不存在时有效,但如果代码存在,它的行为就像它不存在并在过滤器中返回空白值。谁能告诉我在这里做错了什么?

Sub SelectPromoter()

Dim a As String
Dim pt As PivotTable

On Error GoTo Other

ThisWorkbook.Worksheets("New Account Details - Name").Activate
a = Worksheets("Selection").Cells(3, 1).Value

For Each pt In ActiveSheet.PivotTables
With pt.PivotFields("Promoter code")
.ClearAllFilters
.CurrentPage = a
End With

Other:
ActiveSheet.PivotTables("PivotTable4").PivotFields("Promotor code").CurrentPage = "(blank)"

' Select here to add any other key filters for the pivot table using fixed criteria

ActiveSheet.PivotTables("PivotTable4").PivotFields("Milvus Account Name Change?").ClearAllFilters

ActiveSheet.PivotTables("PivotTable4").PivotFields("Milvus Account Name Change?").CurrentPage = "(All)"
With ActiveSheet.PivotTables("PivotTable4").PivotFields("Milvus Account Name Change?")
.PivotItems("N").Visible = False
End With

Next

End Sub

最佳答案

如果我正确理解您的问题陈述,这将解决它:

Sub SelectPromoter()

Dim wsAccountDetails As Worksheet
Set wsAccountDetails = ThisWorkbook.Worksheets("New Account Details - Name")

Dim a As String
a = Worksheets("Selection").Cells(3, 1).Value

On Error GoTo Data_NotFound
Dim pt As PivotTable
For Each pt In wsAccountDetails.PivotTables
With pt.PivotFields("Promoter code")
.ClearAllFilters
.CurrentPage = a
End With

GoTo Data_Found

Data_NotFound:
ActiveSheet.PivotTables("PivotTable4").PivotFields("Promotor code").CurrentPage = "(blank)"
Data_Found:

With wsAccountDetails
.PivotTables("PivotTable4").PivotFields("Milvus Account Name Change?").ClearAllFilters
.PivotTables("PivotTable4").PivotFields("Milvus Account Name Change?").CurrentPage = "(All)"
.PivotTables("PivotTable4").PivotFields("Milvus Account Name Change?").PivotItems("N").Visible = False
End With
Next pt

End Sub
这里的相关行是 GoTo Data_Found .如果不包括该行,标签下的代码 Other:无论是否发生错误,都会执行。这就是为什么你需要“跳过它”。 GoTo 标签不是 if 语句 ,这意味着它们对控制流没有直接影响,您必须使用 GoTo 手动实现该逻辑.虽然 GoTo - 声明不被认为是最佳实践,它们确实有一些(如果很少)真正的用例。您可以阅读更多关于它们如何工作的信息 here .
我不习惯使用数据透视表,但我认为有一种方法可以检查某个值是否可用。正确处理这些情况比简单地让错误被抛出并捕获它们更可取,因为当它们发生时您不会注意到不同的错误。如果你决定坚持这种方法,你至少应该尽可能地限制它:
Sub SelectPromoter()

Dim wsAccountDetails As Worksheet
Set wsAccountDetails = ThisWorkbook.Worksheets("New Account Details - Name")

Dim a As String
a = Worksheets("Selection").Cells(3, 1).Value


Dim pt As PivotTable
For Each pt In wsAccountDetails.PivotTables

On Error GoTo Data_NotFound
With pt.PivotFields("Promoter code")
.ClearAllFilters
.CurrentPage = a
End With
On Error GoTo 0

GoTo Data_Found

Data_NotFound:
ActiveSheet.PivotTables("PivotTable4").PivotFields("Promotor code").CurrentPage = "(blank)"
Data_Found:

With wsAccountDetails
.PivotTables("PivotTable4").PivotFields("Milvus Account Name Change?").ClearAllFilters
.PivotTables("PivotTable4").PivotFields("Milvus Account Name Change?").CurrentPage = "(All)"
.PivotTables("PivotTable4").PivotFields("Milvus Account Name Change?").PivotItems("N").Visible = False
End With
Next

End Sub
请看一下我在哪里移动了有关错误处理的行 On Error ... .
也请看看 How to avoid using Select in Excel VBA .您通常应该避免使用 .Select.Activate因为它效率低下且容易出错。我为代码提供了一种更好的方法,即使用 Worksheet反对直接寻址工作表。

关于excel - 关于没有错误的错误 VBA 行事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66869947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com