【发布时间】:2021-02-10 23:19:42
【问题描述】:
我有一个数据透视表,我正在为同事“打样”它。我创建了 7 个按钮,一个用于一周中的每一天。我已将宏附加到它们,以便数据透视表更改布局以显示单击按钮当天的数据。它有时有效,但我经常收到“运行时错误'1004':无法设置 PivotField 类的方向属性”错误。我选择调试并在 VBA 中运行它,它工作正常。我关闭 VBA,然后宏工作......有时。然后重复整个过程。
这是某一天的代码(除了设置可见字段时,它们都相同,我使用特定日期):
Sub Sun()
'Sunday Macro
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
ActiveSheet.PivotTables("PivotTable1").PivotFields("1 Sun").Orientation = _
xlHidden
ActiveSheet.PivotTables("PivotTable1").PivotFields("2 Mon").Orientation = _
xlHidden
ActiveSheet.PivotTables("PivotTable1").PivotFields("3 Tue").Orientation = _
xlHidden
ActiveSheet.PivotTables("PivotTable1").PivotFields("4 Wed").Orientation = _
xlHidden
ActiveSheet.PivotTables("PivotTable1").PivotFields("5 Thu").Orientation = _
xlHidden
ActiveSheet.PivotTables("PivotTable1").PivotFields("6 Fri").Orientation = _
xlHidden
ActiveSheet.PivotTables("PivotTable1").PivotFields("7 Sat").Orientation = _
xlHidden
With ActiveSheet.PivotTables("PivotTable1").PivotFields("1 Sun")
.Orientation = xlRowField
.Position = 8
End With
ActiveWorkbook.SlicerCaches("Slicer_1_Sun").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_2_Mon").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_3_Tue").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_4_Wed").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_5_Thu").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_6_Fri").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_7_Sat").ClearManualFilter
With ActiveWorkbook.SlicerCaches("Slicer_1_Sun")
.SlicerItems("6am").Selected = True
.SlicerItems("x").Selected = True
.SlicerItems("off").Selected = False
.SlicerItems("(blank)").Selected = False
.SlicerItems("5th").Selected = True
.SlicerItems("6th").Selected = True
.SlicerItems("PTO").Selected = True
End With
End Sub
当我打开调试时,第一个 activesheet 命令突出显示,提示我应该从这里开始修复。
运行宏的按钮在它需要运行的工作表上,因此没有理由指定工作表,但我已经尝试了两种方式,但仍然存在同样的问题。
想法?
更新后的代码仍然出现同样的错误。
这里是指定工作表的更新版本:
Sub Tue()
'Tuesday Macro
Sheets("CrewSheets").PivotTables("PivotTable1").PivotCache.Refresh
Sheets("CrewSheets").PivotTables("PivotTable1").PivotFields("1 Sun").Orientation = _
xlHidden
Sheets("CrewSheets").PivotTables("PivotTable1").PivotFields("2 Mon").Orientation = _
xlHidden
Sheets("CrewSheets").PivotTables("PivotTable1").PivotFields("3 Tue").Orientation = _
xlHidden
Sheets("CrewSheets").PivotTables("PivotTable1").PivotFields("4 Wed").Orientation = _
xlHidden
Sheets("CrewSheets").PivotTables("PivotTable1").PivotFields("5 Thu").Orientation = _
xlHidden
Sheets("CrewSheets").PivotTables("PivotTable1").PivotFields("6 Fri").Orientation = _
xlHidden
Sheets("CrewSheets").PivotTables("PivotTable1").PivotFields("7 Sat").Orientation = _
xlHidden
With Sheets("CrewSheets").PivotTables("PivotTable1").PivotFields("3 Tue")
.Orientation = xlRowField
.Position = 8
End With
ActiveWorkbook.SlicerCaches("Slicer_1_Sun").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_2_Mon").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_3_Tue").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_4_Wed").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_5_Thu").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_6_Fri").ClearManualFilter
ActiveWorkbook.SlicerCaches("Slicer_7_Sat").ClearManualFilter
With ActiveWorkbook.SlicerCaches("Slicer_3_Tue")
.SlicerItems("off").Selected = False
.SlicerItems("x").Selected = True
.SlicerItems("(blank)").Selected = False
.SlicerItems("5th").Selected = True
.SlicerItems("6th").Selected = True
.SlicerItems("PTO").Selected = True
End With
End Sub
【问题讨论】:
-
指定工作表:
Worksheet("Sheet1")而不是使用ActiveSheet -
通过一些测试,我了解到,当我第一次打开工作簿时,我第一次点击一天,代码可以工作,但第二次点击另一天(哪一天似乎不相关)。如果我已经在星期日以外的任何其他日子被选中,当我点击星期日时,它允许我在第二次尝试时点击星期一。似乎只适用于先选择星期天然后星期一。除了第一次尝试之外,似乎没有其他日期组合允许我选择其他日期。
-
我已经尝试过使用之前指定的工作表,但按照您的建议进行了操作。再次执行了多次测试,同样的错误。
-
错误信息是什么?
-
“运行时错误‘1004’:无法设置 PivotField 类的 Orientation 属性”