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