在Beforesave事件中选择单元格

时间:2013-12-13 16:36:53

标签: excel excel-vba before-save vba

请参阅以下代码。 我在Workbook模块中有'beforesave'代码,当我在活动工作表中时它工作正常。然而,从我在表2中使用的表中,我在表单1上也有一个数据透视表。要刷新我的数据透视表,我使用带有附加宏的插入按钮(这在模块部分中)

 Sub Refresh_Pivot()
 '
 ' Refresh_Pivot Macro

   ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
   ActiveWorkbook.Save

 End Sub

在Activate.Workbook.Save上,它开始对我的其他代码(在工作簿模块中)执行操作,我希望这会发生,因为缺少数据的数据透视表不是一个好工具。但是在使用它时它会默认显示错误并突出显示cell.Offset(0,1).Select - 如何防止这种情况?

理想情况下,我希望用户在msgbox上选择“确定”,然后屏幕页面更改为“工作表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

1 个答案:

答案 0 :(得分:1)

应该避免

.SelectINTERESTING READ

我也想知道你为什么要选择那个细胞?什么目的。如果您想与它进行交互,那么您可以在不选择它的情况下进行交互。例如

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

话虽如此,如果你仍然想要选择那个单元格,那么你需要在那张纸上。现在有两种方法。一个就像我在上面的评论中提到的那样。

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之前传递{{1}}以禁用保存?