如何处理VBA中的循环引用?

时间:2016-05-13 20:17:48

标签: excel vba function excel-vba circular-reference

我想在VBA中构建一个Excel函数,用于检查某个单元格中是否存在循环引用。如果有循环引用,我希望函数返回布尔值“TRUE”,否则返回“FALSE”。这是我失败的尝试:

Function CIRC_REF(BadCell As Range) As Boolean
    If BadCell.CircularReference = True Then
        CIRC_REF = True
    Else
        CIRC_REF = False
    End If
End Function

不幸的是,这只会返回一个#VALUE!评估单元格中的错误。我在工作表上测试了它,A1 = 1,A2 = 2,A3 = A1 + A2 + A3。然后我设置B3 = CIRC_REF(A3)。

1 个答案:

答案 0 :(得分:0)

这个问题的最佳解决方案可能不是调用函数,而是使用子过程调用宏。如果您选择包含公式的单元格,那么如果任何单元格具有循环引用,则该过程将返回一个布尔True到单元格,该单元格位于罪魁祸首单元格右侧的一个列单元格中。您必须更改代码才能更改此行为。例如,一个小的更改将允许您在新工作表上记录包含循环引用的单元格的地址位置。这是代码:

Sub mcrCircularReference()
    Dim Cell As Range
    Dim CircRefCell As Range

    For Each Cell In Selection
        Set CircRefCell = Worksheets("Sheet1").CircularReference
        CircRefCell.Offset(0, 1).Value = True
    Next Cell
End Sub