2

我有一个应用于工作表的 VBA 代码及其更改。因此,每当工作表中有新条目或删除(任何更改)时,它都会刷新所有附加到它的数据透视表 -

Private Sub Worksheet_Change(ByVal Target As Range)

ThisWorkbook.RefreshAll

End Sub

(我对 VBA 或 office 脚本代码不是很熟悉,所以对于基本问题很抱歉。)

但这不适用于在线excel。因此,我需要在 excel 在线代码编辑器(或打字稿)中使用的代码。到目前为止,我能够编写这段代码 -

async function main(workbook: ExcelScript.Workbook) {
  await Excel.run(async (context) => {
    console.log("Adding Sheet OnChange Handler");
    let mysheet = context.workbook.worksheets.getItem("Attendance");
    mysheet.onChanged.add(ref);
    await context.sync();
    console.log("Added a worksheet-level data-changed event handler.");
  }
  )};
function ref(workbook: ExcelScript.Workbook) {
  let selectedsheet = workbook.getActiveWorksheet();
  selectedsheet.refreshAllPivotTables();
  console.log("Pivot Refreshed.");
};

我收到一个错误找不到名称“Excel”,只要工作表中没有任何变化,它就应该工作。请帮我解决一下这个。谢谢。

4

2 回答 2

1

我认为你()在方法的最后错过了refreshAllPivotTables

请试试这个 -

function main(workbook: ExcelScript.Workbook) {
  workbook.refreshAllPivotTables(); // Refresh all pivot tables
}
于 2020-09-11T19:56:02.163 回答
1

正如@Daniel G. Wilson 所回答的那样,现在不可能在脚本中。所以我使用了 Power Automate 方法。

我在代码编辑器中编写了脚本并保存了它-

function main(workbook: ExcelScript.Workbook) {
let selectedsheet = workbook.getWorksheet("Pivot");
selectedsheet.refreshAllPivotTables();
console.log("Pivot Refreshed");
};

然后我在 Power Automate 中创建了一个计划流。步骤是 -

  1. 创建新的计划流。
  2. 给一些名字。
  3. 设置开始时间和间隔以自动运行它。
  4. 选择新步骤。
  5. 选择 Excel 在线业务。
  6. 选择运行脚本。
  7. 选择文件位置和脚本名称。
  8. 保存并测试流程。

它工作正常。谢谢。

于 2020-09-18T11:55:09.957 回答