Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于数据透视表缓存,excel无法完成此任务_Excel_Vba_Memory_Pivot Table_Excel 2013 - Fatal编程技术网

由于数据透视表缓存,excel无法完成此任务

由于数据透视表缓存,excel无法完成此任务,excel,vba,memory,pivot-table,excel-2013,Excel,Vba,Memory,Pivot Table,Excel 2013,当我完成excel宏时,我非常激动,然后我的老板递给我一个大得多的文件,让我试着测试。大小差异从15000kb到275000kb。我只是希望它能继续运行。我错了。我遇到“Excel无法使用可用资源完成此任务”错误。所以我们试着在我同事的8core 16GB RAM机器上运行它。认为这会把它赶出公园。不。同样的错误,但是这次在第二个透视表上。所以,我假设错误在我的数据透视表函数中。有没有一种方法可以清除数据透视表的创建,比如清除缓存之类的 Function CPT(ByRef Location()

当我完成excel宏时,我非常激动,然后我的老板递给我一个大得多的文件,让我试着测试。大小差异从15000kb到275000kb。我只是希望它能继续运行。我错了。我遇到“Excel无法使用可用资源完成此任务”错误。所以我们试着在我同事的8core 16GB RAM机器上运行它。认为这会把它赶出公园。不。同样的错误,但是这次在第二个透视表上。所以,我假设错误在我的数据透视表函数中。有没有一种方法可以清除数据透视表的创建,比如清除缓存之类的

Function CPT(ByRef Location() As String, Name As String, Data As String, ByRef Filters() As     String, ByRef Rows() As String, ByRef Columns() As String _, ByRef Values() As String, ByRef Types() As String)
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        Data, Version:=xlPivotTableVersion15).createPivotTable _
        TableDestination:=Worksheets(Location(0)).Range(Location(1)), TableName:=Name, _
        DefaultVersion:=xlPivotTableVersion15
    ActiveWorkbook.ShowPivotTableFieldList = True
    '/////////////////////////////////////////////
    'If it errors field name is probably incorrect
    '/////////////////////////////////////////////
    'Values
    If (Not IsArrayEmpty(Values())) Then
        For i = LBound(Values) To UBound(Values)
            If (Types(i) = "Max") Then
                ActiveSheet.PivotTables(Name).AddDataField ActiveSheet.PivotTables( _
                Name).PivotFields(Values(i)), "Max of " & Values(i), xlMax
            ElseIf (Types(i) = "Sum") Then
                ActiveSheet.PivotTables(Name).AddDataField ActiveSheet.PivotTables( _
                Name).PivotFields(Values(i)), "Sum of " & Values(i), xlSum
            ElseIf (Types(i) = "Min") Then
                ActiveSheet.PivotTables(Name).AddDataField ActiveSheet.PivotTables( _
                Name).PivotFields(Values(i)), "Min of " & Values(i), xlMin
            ElseIf (Types(i) = "Count") Then
                ActiveSheet.PivotTables(Name).AddDataField ActiveSheet.PivotTables( _
                Name).PivotFields(Values(i)), "Count of " & Values(i), xlCount
            End If
        Next i
    End If

    'Filters
    If (Not IsArrayEmpty(Filters())) Then
        For i = LBound(Filters) To UBound(Filters)
            With ActiveSheet.PivotTables(Name).PivotFields(Filters(i))
            .Orientation = xlPageField
            End With
        Next i
    End If

    'Rows
    If (Not IsArrayEmpty(Rows())) Then
        For i = LBound(Rows) To UBound(Rows)
            With ActiveSheet.PivotTables(Name).PivotFields(Rows(i))
            .Orientation = xlRowField
            .Position = 1
            End With
        Next i
    End If

    'Columns
    If (Not IsArrayEmpty(Columns())) Then
        For i = LBound(Columns) To UBound(Columns)
            With ActiveSheet.PivotTables(Name).PivotFields(Columns(i))
            .Orientation = xlColumnField
            End With
        Next i
    End If


End Function

有没有更有效的方法来实现透视表功能?我必须创造很多东西,所以我不想把每一个都编码出来

您是否尝试手动生成透视表?如果Excel文件大小确实是275MB,我怀疑Excel将无法正确处理数据透视表。您可能希望尝试通过查询数据表的数据源或从数据表生成的MS Access数据库生成透视表。如果所有宏都是手动完成的,则所有操作都正常工作。尽管有时会遇到困难(我的电脑很陈旧,老板的电脑不会有问题)。在添加/更改字段时,您是否尝试将透视表的
.ManualUpdate
属性设置为
True
?看见