我有一个大型的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.