在Excel中手动编辑依赖关系树

我有一个大型的Excel电子表格.它包括许多运行各种查找功能的数据表.为了简化版本控制,我目前正在将这些数据表拉出到单独的.csv文件中,因此它们可以正确地进行差异化.不幸的是,它们包含一些公式,当我将文件转换为静态.csv时,显然无法正常工作.

我目前的解决方案是,无论何处计算是不可避免的,将计算移动到主工作簿中的自己的单元格并命名单元格.我们称之为ExampleCalc.然后,在计算所在的数据表的单元格中,我改为输入ref:ExampleCalc.然后进行查找,我编写了以下UDF:

Function RaceLookup(lookupString As Variant, lookupTable As Range, raceID As Range, cleanIt As Boolean) As Variant
    ' Helper function to make the interface formulae neater
    Dim temp As Variant
    Dim temp2 As String
    Dim inpString As Variant
    Dim id As Double

    id = raceID.Value

    If TypeOf lookupString Is Range Then
        inpString = lookupString.Value
    Else
        inpString = lookupString
    End If

    With Application.WorksheetFunction
        temp = .Index(lookupTable, id, .Match(inpString, .Index(lookupTable, 1, 0), 0))
        If Left(temp, 4) = "ref:" Then
            temp2 = Right(temp, Len(temp) - 4)
            temp = Range(temp2).Value
        End If

        If cleanIt Then
            temp = .clean(temp)
        End If
    End With

    RaceLookup = temp

End Function

这在数据表上执行标准INDEX查找.如果它找到的条目不以ref:开头,则只返回它.如果它确实以ref:开头,它会删除ref:并将剩下的任何内容视为单元格名称引用.因此,如果INDEX返回的值是ref:ExampleCalc,那么它将返回ExampleCalc单元格的内容.

问题是ExampleCalc没有添加到依赖关系树.这意味着如果ExampleCalc的值更改,则检索的值不会更新.有没有办法让函数将ExampleCalc添加到单元格的依赖树?或者,是否有更明智的方法来做到这一点?

最佳答案 我找到的解决方案是添加线

Application.Volatile True   ' this causes excel to know that if the function changes, it should re calculate.  You will still need to click "Calculate Now"

进入功能.但是,正如我的代码注释所示,如果唯一的更改是在功能输出中,则必须手动触发重新计算.

有关更多信息,请参见https://msdn.microsoft.com/en-us/library/office/ff195441.aspx.

点赞