0

以下のコードを参照してください。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
4

1 に答える 1

1

.Select避けるべきです。 興味深い読み物

また、なぜそのセルを選択しようとしているのか知りたいですか? 目的は何ですか。それを操作したい場合は、それを選択せず​​に行うことができます。例えば

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
    With cell.Offset(0, 1)
        '
        ''~~> Do something
        '
    End With
    Exit For
End If

それでもそのセルを選択したい場合は、そのシートにいる必要があります。現在、2つの方法があります。1つは、上記のコメントで述べたようなものです。

Sheet2.Activateイベントの直前にFor Each cell In RAll追加するかWorkbook_BeforeSave、ボタンのクリック イベントでそれを行います。

Sub Refresh_Pivot()
   ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
   Sheet2.Activate
   ActiveWorkbook.Save
End Sub

別のポイント。保存を無効にするCancel = True前に渡したいと思うかもしれませんか?Exit For

于 2013-12-13T17:15:59.230 に答える