【问题标题】:Convert Excel VBA for PivotChart为数据透视图转换 Excel VBA
【发布时间】:2021-11-01 19:41:53
【问题描述】:

我正在编写代码来创建 Excel 数据透视图,但没有可见的数据透视表。显然,我无法通过 Excel_TLB 执行此操作(根据 Stackoverflow 上的另一个问题),因此我使用的是 ComObj 和 Excel2010。我的代码成功创建了数据透视图。我现在正在尝试设置某些过滤器。我已经捕获了相关的 VBA 代码,但我无法将其转换为 Delphi。 VBA 代码是

  ActiveChart.PivotLayout.PivotTable.PivotFields( _
        "[Range].[Revenue Type Group].[Revenue Type Group]").VisibleItemsList = Array( _
        "[Range].[Revenue Type Group].&[NEW]", _
        "[Range].[Revenue Type Group].&[WORKLOAD]")

我的 Delphi 代码(只设置一个值)是

 XLApp.ActiveWorkbook.ActiveChart.PivotLayout.PivotTable.PivotFields['[Range].[Revenue Type Group].[Revenue Type Group]'].VisibleItemsList[1] := '[Range].[Revenue Type Group].&[NEW]';

虽然我可以编译,但在运行时出现“不支持集合”异常。

我在 MS VBA 文档中没有看到任何奇怪的地方... https://docs.microsoft.com/en-us/office/vba/api/excel.pivotfield.visibleitemslist

我也尝试过使用动态数组,例如

SetLength(A1, 1);
  A1[0] := '[Range].[Revenue Type Group].&[NEW]';
  XLApp.ActiveWorkbook.ActiveChart.PivotLayout.PivotTable.PivotFields['[Range].[Revenue Type Group].[Revenue Type Group]'].VisibleItemsList := A1;
 

这将不会编译,并出现错误“在 Variant Dispatch 调用中不允许使用类型。 我尝试将 A1 定义为字符串数组、变量数组和 Olevariant 数组。

任何想法表示赞赏。

【问题讨论】:

  • PivotFields 是一种方法,而不是数组属性。
  • Oliver - ShowMessage(XLApp.ActiveWorkbook.ActiveChart.PivotLayout.PivotTable.PivotFields['[Range].[Revenue Type Group].[Revenue Type Group]'].Name);按预期工作和显示,所以我认为 PivotFields 语法不是问题。
  • 也许你需要使用VarArrayCreate()(见this)。
  • 如果问题包含minimal reproducible example会更容易回答。
  • @Olivier - VarArrayCreate 成功了。提交作为答案,我会接受。

标签: excel vba delphi delphi-10.3-rio


【解决方案1】:

您需要使用VarArrayCreate() 创建数组。使用 COM 对象时不接受常规的 Delphi 数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多