excel - SpecialCells(xlCellTypeFormulas, xlErrors) 仅在宏独立运行时返回预期结果
问题描述
我正在创建一个宏来检查工作簿中每个工作表的公式中的错误。宏在触发 BeforeSave 挂钩时运行,并提示用户在发现错误时决定是否仍要保存。
Public Sub errorCheck()
On Error Resume Next
Application.StatusBar = "Running: formulaErrorCheck"
Dim ws As Worksheet
Dim errors As range
Dim r As range
For Each ws In Worksheets
Set errors = Nothing
Set errors = ws.UsedRange.SpecialCells(xlCellTypeFormulas, xlErrors).cells
If Not (errors Is Nothing) Then
For Each r In errors
If IsError(r.Value) = True Then
Select Case r.Value
Case CVErr(xlErrValue), CVErr(xlErrDiv0), CVErr(xlErrName), CVErr(xlErrRef)
If MsgBox("Excel Sheet " + ws.name + " contains a reference error in cell " + r.Address(False, False) + ". Save anyway?", vbYesNo, "") = vbNo Then
Application.GoTo Reference:=r
GoTo quit_checking
End If
End Select
End If
Next
End If
Next
quit_checking:
Application.StatusBar = False
End Sub
检测事件的类模块中的代码:
OptionExplicit
Private WIthEvents App As Application
Private Sub App_WorkbookBeforeSave(ByVal wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
Book_BeforeSave SaveAsUI, Cancel
End Sub
Public Sub Book_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call errorCheck
End Sub
我遇到的问题是
Set errors = ws.UsedRange.SpecialCells(xlCellTypeFormulas, xlErrors).cells
当我独立运行宏时返回预期的单元格。但是,当从 BeforeSave 挂钩调用宏时,它会返回整个使用范围。我认为这可能是对工作簿的引用存在问题,但工作表仍按预期迭代。我尝试删除 On Error Resume Next 以确保实际上没有引发错误。我不知道有什么区别。
解决方案
推荐阅读
- google-apps-script - 结合两个 onEdit 函数,每个函数都使用自己的数据为自己的工作表工作
- mysql - 优化MySql临时表更新查询
- flutter - Flutter - VSCode 没有完成飞镖代码,通过建议框自动完成选择小部件只是名称
- r - 根据先前的值和 data.table 中的另一个变量填充一个变量
- python - 等待正在运行的容器的正确异步方式
- asp.net-mvc - 如何在 asp.net mvc 中使用 ms graph api 更改 AD B2C 用户密码
- javascript - Angular 10 两次下载已编译的资产
- c# - 未使用 PayPal 响应更新的奇怪交易
- reactjs - 如何使用 React Hooks 将对象推送到数组中
- github - Github 个人访问令牌的带宽限制是多少?