[英]VBA Change Pivot Table Field: Error 1004
我有一个工作簿,其中包含每周的工时信息。 一切都可以通过Userform
查看和修改。 在用户Userform
我有一个ListBox1
来显示相关周的PivotTableX
表,以便我可以轻松地看到一周的每日和总加班时间。 在我的用户Userform
我有两个单选按钮,它们将交替显示PivotTableX
以显示“ 总小时数”或“ 加班时间” 。
单击单选按钮以更改PivotField
,出现Error 1004
。 我已经做了很多搜索,但是找不到有效的解决方案。 我可能不太了解数据透视表背后的代码,以至于不知道什么时候解决方案就在我眼前。
以下是引发错误的代码:
Private Sub OptionButton1_Change()
Dim ws As Worksheet
Dim wsName As String
Dim pvtTable As PivotTable
Set ws = ThisWorkbook.Sheets(SelSheet())
ws.Select
Set pvtTable = ws.PivotTables("PivotTable" & ws.Index)
With pvtTable
If OptionButton1.Value = True Then 'Total Time
.AddDataField .PivotFields("TOTAL (W/O LUNCH)"), "Sum of TOTAL (W/O LUNCH)", xlSum
.PivotFields("Sum of PREMIUM TIME").Orientation = xlHidden
Else
.AddDataField .PivotFields("PREMIUM TIME"), "Sum of PREMIUM TIME", xlSum
.PivotFields("Sum of TOTAL (W/O LUNCH)").Orientation = xlHidden
End If
End With
End Sub
.AddDataField
行会引发错误。 它使我认为我的代码没有在工作表上找到数据透视表。 为了解决这个问题,我没有使用PivotTables()
索引号,而是专门通过名称来调用它。 创建新工作表时,将创建表和数据透视表并通过工作表索引进行编号。 按照从最旧到最新的顺序创建时,我的工作表将永远不会更改其索引位置。
我还认为问题可能出在未选中工作表上,因为过去我遇到过与1004有关的类似问题,因此我选择工作表但没有执行任何操作。
在询问之前, SelSheet()
是一个简单的函数,用于根据ComboBox4
(“周”旁边的组合框)中的选择返回工作表的名称。 我将在最后添加代码段(它起作用了,这不是问题。)
我已验证选择了正确的工作表,并且通过Debug.Print
,表和数据透视表的名称也正确。
Function SelSheet() As String
Dim ws As Worksheet
Dim wsName As String
wsName = ComboBox4.Value
Set ws = ThisWorkbook.Sheets(Replace(wsName, "/", ""))
SelSheet = ws.Name
End Function
与sktneer
讨论之后,我发现了问题所在:
使用数据透视表,如果您尝试.AddXxxxField
该位置的那个数据透视表上已经存在一个字段,则会收到错误1004。
另外,如果您尝试将字段的方向设置为它已经具有的方向,则会收到错误1004。
以下是我对代码进行的更改,以清除我遇到的所有问题:
With pvtTable
For Each pfData In .DataFields
pfData.Orientation = xlHidden
Next pfData
If OptionButton1.Value = True Then 'Total Time
.AddDataField .PivotFields("TOTAL (W/O LUNCH)"), "Sum of TOTAL (W/O LUNCH)", xlSum
Else
.AddDataField .PivotFields("PREMIUM TIME"), "Sum of PREMIUM TIME", xlSum
End If
End With
谢谢您对sktneer
的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.