gpt4 book ai didi

excel - 从 SQL Server DB 更新单独工作表中的数据后自动刷新 Excel 2007 数据透视表

转载 作者:行者123 更新时间:2023-12-04 20:20:26 26 4
gpt4 key购买 nike

背景:

我在 Excel 中有三张工作表。

  • 带有数据透视表的汇总表,可从
  • 下面的 #2 中提取数据
  • 从 SQL Server DB 中提取数据的数据表。 (拉出一个类别类型和一个美元值)
  • 具有用于刷新数据和理想情况下数据透视表的按钮的工作表。

  • 问题:
    当我单击按钮时,数据表会正确刷新,但数据透视表不会。该工作簿在早上 5 点自动运行,并将结果以 PDF 格式发送给人们,因此我必须想办法在 PDF 生成、发送和工作簿关闭之前刷新数据透视表。

    我试过的:
    首先,当单击按钮时,它会运行:

    ActiveWorkbook.RefreshAll
    Application.CalculateFull

    它确实正确更新了数据表,而不是枢轴。

    我努力了:
  • 在以上两个命令之间和之后添加以下命令均无效:

  • Sheets("Summary").PivotTables("PivotTable6").PivotCache.Refresh
    Sheets("Summary").PivotTables("PivotTable6").RefreshTable
  • 我试过两次(背靠背)运行这两个命令,如下所示:

  • ActiveWorkbook.RefreshAll
    Application.CalculateFull
    ActiveWorkbook.RefreshAll
    Application.CalculateFull

    希望它能在第一次运行时获取数据,并在第二次运行中成功进行数据透视刷新。没用。
  • 我试图欺骗 Excel 以为我关闭并重新打开工作簿,然后重新运行刷新:

  •  ThisWorkbook.Saved = True
    Workbooks(1).Activate
    ActiveWorkbook.RefreshAll
    Application.CalculateFull

    我尝试这样做的原因是因为在运行工作簿(枢轴不刷新)后我保存并关闭。我重新打开(枢轴仍然错误,数据是正确的),我重新运行,(数据再次正确并且相同),现在枢轴是正确的。所以我希望模拟这个。

    在这一点上,我想不出别的。我正处于我认为 Excel 无法做到这一点的地步。还有一件事。最初我们将数据直接从 SQL Server DB 输入数据透视表,但我们不断收到这些错误,因此我们将采用不同的方法:
  • 删除部分:/xl/pivotTables/pivotTable1.xml部分。 (数据透视 TableView )
  • 删除部分:/xl/pivotTables/pivotTable5.xml部分。 (数据透视 TableView )
  • 删除记录:/xl/workbook.xml 中的工作簿属性部分(工作簿)


  •  <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
    <recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <logFileName>error014800_01.xml</logFileName>
    <summary>Errors were detected in file 'T:\Reports\RP\Archive\Historical Excel\01-11\RP_01-07-11.xlsm'</summary>

    <removedParts summary="Following is a list of removed parts:">
    <removedPart>Removed Part: /xl/pivotTables/pivotTable1.xml part. (PivotTable view)</removedPart>
    <removedPart>Removed Part: /xl/pivotTables/pivotTable5.xml part. (PivotTable view)</removedPart>
    </removedParts>

    <removedRecords summary="Following is a list of removed records:">
    <removedRecord>Removed Records: Workbook properties from /xl/workbook.xml part (Workbook)</removedRecord>
    </removedRecords>
    </recoveryLog>

    任何帮助是极大的赞赏。

    最佳答案

    您可以使用工作表更改事件来触发数据透视表的刷新。

    Private Sub Worksheet_Change(ByVal Target As Range)

    On Error GoTo ErrHandler
    Application.EnableEvents = False

    'Check to see if the worksheet range raising this event overlaps the range occupied by our data dump
    If (Not (Intersect(Target, ActiveSheet.ListObjects("DATA_TABLE_NAME_HERE").Range) Is Nothing)) Then

    'If it does, then refesh the pivot tables that depend on this data (not automatic, name each table pivot table explicity)
    ActiveSheet.PivotTables("PIVOT_TABLE_NAME_HERE").RefreshTable

    End If

    ErrHandler:
    Application.EnableEvents = True
    End Sub

    您可能需要更换 ActiveSheetSheets("whatever")取决于您的工作簿的框架。

    关于excel - 从 SQL Server DB 更新单独工作表中的数据后自动刷新 Excel 2007 数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663245/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com