Excel崩溃,需要在编辑数据透视时重新启动

时间:2018-02-27 18:34:54

标签: excel vba excel-vba

以下代码将每个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),复制并粘贴为自身顶部的值以删除公式并解决了我的问题。

2 个答案:

答案 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