以下のコードを参照してください。Workbook モジュールに「beforesave」コードがあり、アクティブ シートにいるときに正常に動作します。ただし、シート 2 で使用するテーブルから、シート 1 にもピボット テーブルがあります。ピボットを更新するには、マクロが添付された挿入ボタンを使用します (これはモジュール セクションにあります)。
Sub Refresh_Pivot()
'
' Refresh_Pivot Macro
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
ActiveWorkbook.Save
End Sub
Activate.Workbook.Save で、他のコード (workbook モジュールにある) に作用し始めます。データが欠落しているピボット テーブルは適切なツールではないため、これを実現したいと考えています。ただし、これを使用すると、デフォルトでエラーが発生し、セルが強調表示されます.Offset(0, 1).Select - どうすればこれを防ぐことができますか?
理想的には、ユーザーが msgbox で [OK] を選択すると、画面ページがシート 2 に変わり、問題のあるセルが強調表示されます。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim esave As Range
Dim psave As Range
Dim jsave As Range
Dim RAll As Range
Dim cell As Range
Set esave = Sheet2.Range("Table1[Estimated Claim (USD)]")
Set psave = Sheet2.Range("Table1[Provisional Claim (USD)]")
Set jsave = Sheet2.Range("Table1[Agreed Claim (USD)]")
Set RAll = Union(esave, psave, jsave)
For Each cell In RAll
If cell.Value <> "" And cell.Offset(0, 1).Value = "" Then
Dim missdata
missdata = MsgBox("Missing Data - Enter the Date for WorkBook to Save", vbOKOnly, "Missing Data")
Cancel = True
cell.Offset(0, 1).Select
Exit For
End If
Next cell
End Sub