请参阅以下代码。 我在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
答案 0 :(得分:1)
.Select
。
INTERESTING 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}}以禁用保存?