Excel 在Beforesave事件中选择单元格

Excel 在Beforesave事件中选择单元格,excel,before-save,vba,Excel,Before Save,Vba,参见下面的代码。 我在工作簿模块中有“beforesave”代码,当我在活动工作表中时,它可以正常工作。然而,从我在第2页上使用的表来看,我在第1页上也有一个透视表。要刷新透视,我使用带有附加宏的插入按钮(位于模块部分) 在Activate.Workbook.Save上,它开始作用于我的其他代码(在工作簿模块中),我希望发生这种情况,因为缺少数据的透视表不是一个好工具。但是,使用此选项时,默认情况下会出现一个错误,并突出显示单元格。偏移量(0,1)。选择-如何防止此情况发生 理想情况下,我希望用

参见下面的代码。 我在工作簿模块中有“beforesave”代码,当我在活动工作表中时,它可以正常工作。然而,从我在第2页上使用的表来看,我在第1页上也有一个透视表。要刷新透视,我使用带有附加宏的插入按钮(位于模块部分)

在Activate.Workbook.Save上,它开始作用于我的其他代码(在工作簿模块中),我希望发生这种情况,因为缺少数据的透视表不是一个好工具。但是,使用此选项时,默认情况下会出现一个错误,并突出显示单元格。偏移量(0,1)。选择-如何防止此情况发生

理想情况下,我希望用户在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
Private子工作簿\u保存前(ByVal SaveAsUI为布尔值,Cancel为布尔值)
暗视范围
暗psave As范围
Dim jsave As范围
变暗RAll As范围
暗淡单元格作为范围
Set esave=表2.范围(“表1[估计索赔(美元)])
Set psave=表2.范围(“表1[暂定索赔(美元)])
Set jsave=Sheet2.范围(“表1[约定索赔(美元)]”)
Set RAll=Union(esave、psave、jsave)
对于RAll中的每个单元格
如果单元格.Value“”和单元格.Offset(0,1).Value=”“,则
模糊误码数据
missdata=MsgBox(“缺少数据-输入工作簿保存的日期”,vbOKOnly,“缺少数据”)
取消=真
单元格偏移量(0,1)。选择
退出
如果结束
下一个细胞
端接头

。应避免选择。

我也想知道你为什么要选择那个单元格?目的是什么。如果您想与它交互,那么您可以不选择它而进行交互。比如说

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

还有一点。您可能希望在退出For之前通过
Cancel=True
,以禁用保存?

您需要添加Sheet2。在运行For循环之前激活。
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
Sub Refresh_Pivot()
   ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
   Sheet2.Activate
   ActiveWorkbook.Save
End Sub