【发布时间】:2014-03-25 18:55:11
【问题描述】:
简介
我有一个电子表格,其中包含由 VBA 宏读取的公式。有时,这些公式会链接到丢失引用的单元格。 (关系树可以上升到未定义的级别)
问题说明
我想要实现的是,每当发生这种情况时,代码都会向用户返回一个带有原始恶意单元位置的消息框。 (将错误追溯到原点)。
我面临的主要困难是按照正确的分支找到错误的根源。
示例
一个包含两个工作表的工作簿,公式如下:
- 单元格
Sheet1!A1==IF(#REF!="", "", B2)(有人替换了原来的单元格内容,现在引用丢失了) - 单元格
Sheet1!B1==A1 - 单元格
Sheet1!B2==11 - 单元格
Sheet2!A1==12 - 单元格
Sheet2!B1==A1+Sheet1!A1+Sheet1!B1
我有兴趣将 Sheet2!B1 追溯到其原始引用错误。
到目前为止尝试过的代码:
Sub CheckRangeB1()
Dim RangeB1 As Range
Dim RogueAddress As String
Set RangeB1 = Sheets("Sheet2").Range("B1")
RogueAddress = MissingRef(RangeB1)
MsgBox RogueAddress
End Sub
Public Function MissingRef(ByVal CheckRange As Range) As String
Dim RogueCell As Range
If IsError(CheckRange) Then
If CheckRange.Value = CVErr(xlErrRef) Then
If HasPrecedents(CheckRange) = False Then
MissingRef = CheckRange.Address
ElseIf IsError(CheckRange.DirectPrecedents) Then
MissingRef = MissingRef(CheckRange.DirectPrecedents)
Else
MissingRef = CheckRange.Address
End If
End If
Else
MissingRef = "NOERROR"
End If
End Function
Public Function HasPrecedents(ByVal target As Range) As Boolean
On Error Resume Next
HasPrecedents = target.DirectPrecedents.Count
End Function
目前这没什么用,因为.DirectPrecedents 只是在追溯Sheet2!A1。
编辑
另一种方法可能是解析公式并遵循引用的单元格。但我不确定如何提取引用的单元格,而事先不知道公式的外观。我还是更喜欢.DirectPrecedents
方法。
谢谢。
【问题讨论】: