以下代码将每个Pivot字段添加到数据透视表的值字段中。我希望这对我的数据库发生,但是当我运行它时,我的Excel会一直崩溃。我尝试单步执行代码以查看它停止的位置,并在添加29个Pivot字段后在.Orientaton = xlDataField
崩溃。我尝试手动执行此操作,我可以手动完成没问题。我手动添加了50个并且没有崩溃。有关为什么会发生这种情况的任何想法?
Sub AddAllFieldsValues()
'Update 20141112
Dim pt As PivotTable
Dim I As Long
For Each pt In ActiveSheet.PivotTables
For I = 1 To pt.PivotFields.Count
With pt.PivotFields(I)
If .Orientation = 0 Then .Orientation = xlDataField
End With
Next
Next
End Sub
找出问题:数据库中第29列的标题中包含254个字符,这是导致程序失败的原因。当我将标题更改为较小的标题时,它运行正常,当我手动将该字段放入数据透视表时,它可以正常工作......对于为什么会出现这种情况有什么想法?
编辑:@Andrey Ampilogov分享的答案帮助我解决了我的问题。我刚刚在原始标题行下方添加了一行,并且=左(单元格在上面,100),复制并粘贴为自身顶部的值以删除公式并解决了我的问题。
答案 0 :(得分:1)
也许尝试这样的事情:
Sub AddAllFieldsValues()
'Update 20141112
Dim pt As PivotTable
Dim I As Long
For Each pt In ActiveSheet.PivotTables
pt.ManualUpdate = True '<< ##
For I = 1 To pt.PivotFields.Count
With pt.PivotFields(I)
If .Orientation = 0 Then .Orientation = xlDataField
End With
Next
pt.ManualUpdate = False '<< ##
DoEvents '<< just for good measure
Next
End Sub
答案 1 :(得分:1)
由于评论的长度有限制,所以我们在这里讨论了@Pinlop。
@Pinlop注意到第29列有一个长标题(254个字符)。这个标题应该是在数据透视表标题中,而是Excel崩溃。
这是一个非常好的通知,因为Excel单元格值限制为255个字符,超出的任何符号将在单元格中被截断:Excel specifications and limits。
一种解决方法是将列标题限制为少于254个字符。另一种方法是将Excel文件(如果是xls)转换为新版本(xlsx),该版本在单元格中支持超过255个字符。我也认为VB编辑器中有一些东西无法处理某些限制。第三种解决方法是使用短文本重命名长列,然后使用VBA将标题分配给变量。并重命名相应的数据透视表。
更多链接可以研究其他人对该问题的体验:
https://www.mrexcel.com/forum/excel-questions/903554-pivot-tables-more-than-255-characters.html29th
https://www.mrexcel.com/forum/excel-questions/119563-character-limit-pivot-tables.html
https://excelribbon.tips.net/T011784_Text_Truncated_in_PivotTable.html