2

ワークシートに適用された VBA コードとその変更があります。したがって、シートに新しいエントリまたは削除 (変更) があるたびに、それに関連付けられているすべてのピボット テーブルが更新されます。

Private Sub Worksheet_Change(ByVal Target As Range)

ThisWorkbook.RefreshAll

End Sub

(私は VBA や Office スクリプト コードにあまり詳しくないので、基本的な質問で申し訳ありません。)

しかし、これはExcelオンラインでは機能しません。したがって、Excel オンライン コード エディター (または typescript) で使用するコードが必要です。これまでのところ、私はこのコードを書くことができます -

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

@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 に答える