2

国と製品でフィルタリングしてから分析する必要がある非常に大きなファイルに、グローバルな売上データがあります。国と製品の組み合わせを変えて同じ分析を何度も行う必要があるため、マクロを使用してこれを実行しようとしています。

マクロの動作は次のとおりです。

  1. グローバル データを含むソース ファイルを開きます。
  2. データをフィルタリングします。
  3. それをコピーして、マクロを格納するワークブックに貼り付けます。
  4. ワークブックを再計算して更新します。
  5. ファイルのコピーを別のフォルダーに保存します。

マクロは正常に動作しているように見え、ファイルは保存されていますが、手順 4 と 5 で 2 つの問題が発生しています。

  • ピボット テーブルが更新されていないようです。これは、2 番目の問題が原因である可能性があります。
  • 保存されたコピーのすべてのピボット テーブルは、引き続き元のファイルを参照します

リンクなしでコピーされたファイルを生成することで両方の問題を修正したいと思いますが、コピーされたファイルをそれ自体に強制的にリンクさせることができる可能性のある応急処置も受け入れています(これは私が行った場合には機能しないようです)手動)。

すべてを見たい場合は完全なコードがありますが、問題はファイルの保存方法にあると思われるため、その部分をここに貼り付けます。マクロの別の部分が必要な場合はお知らせください。事前に感謝します。

保存機能:

Public Sub SaveAsCopy(filePath As String)
   Dim updateStatus As Boolean

   'Check current status of Alerts
   updateStatus = Application.DisplayAlerts
   'Turn off alerts
   Application.DisplayAlerts = False

   ThisWorkbook.Sheets.Copy 'creates new workbook without macros"
   'The New workbook copy is now the Active workbook
   'Delete Control Sheet
   ActiveWorkbook.Sheets(1).Delete

   'Save Macro free version and close
   ActiveWorkbook.SaveAs Filename:=filePath, FileFormat:=51
   ActiveWorkbook.Close

   'Revert back to origional alert status
   Application.DisplayAlerts = updateStatus

End Sub

関数呼び出し:

Call SaveAsCopy(filePath)
4

1 に答える 1

0

よりエレガントなソリューションに噛みつかなかったので、私が開発した回避策を共有します。

Public Sub SaveAsCopy(filePath As String)
   Dim updateStatus As Boolean

   'Check current status of Alerts
   updateStatus = Application.DisplayAlerts
   'Turn off alerts
   Application.DisplayAlerts = False

   'Hide Control Sheet
   ActiveWorkbook.Sheets(1).Visible = False

   'Save Macro free version and close
   ActiveWorkbook.SaveAs Filename:=filePath, FileFormat:=52

   'Unhide
   ActiveWorkbook.Sheets(1).Visible = True

   'Revert back to original alert status
   Application.DisplayAlerts = updateStatus

End Sub

親関数の最後で、現在のファイルを閉じ、元のファイルを再度開き、新しいワークブックをループしてマクロを削除します。

于 2012-07-12T23:52:31.243 に答える