Excel formula calculating once then deleting
我有一个excel公式:
1 | =SplitKey(GetSysCd(INDEX([ReportValue],MATCH("mtr_make_model",[FieldName],0)),INDEX([ListName],MATCH("mtr_make_model",[FieldName],0))), 0) |
在 VBA 中运行一些子例程,但主要是匹配值并将这些值插入到单元格中。当它找到"mtr_make_model"的值时,它会运行并匹配 sys 代码表中的值。我遇到的问题是它只计算一次,然后它删除公式,现在只有值......如果我去 mtr_make_model 字段并更改值,公式不会重新计算。有没有人听说过这种情况?这是由于 VBA 代码中的某些内容造成的吗?如何使该公式保持不变,如果某些值发生变化,该公式会重新计算?
提前致谢。
下面是两个函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | Public Function GetSysCd(ByVal name As String, sysCdTableName As String) As String Dim r As Integer Dim sysCdTable As Range Dim nameList As Variant Dim sysCd As String On Error GoTo GetSysCd_Error Set sysCdTable = Worksheets("sys_cd").Range(sysCdTableName) nameList = WorksheetFunction.Index(sysCdTable, 0, 2) r = WorksheetFunction.Match(name, nameList, 0) sysCd = WorksheetFunction.Index(sysCdTable, r, 1) GetOutOfHere: On Error GoTo 0 GetSysCd = sysCd Exit Function GetSysCd_Error: sysCd ="" GoTo GetOutOfHere End Function Public Function SplitKey(s As String, v As Integer) Dim aString As Variant Dim r As Integer If Len(s) > 2 Then aString = Split(s,"_") If v = 0 Or v = 1 Then SplitKey = aString(v) Else SplitKey = aString(0) End If Else SplitKey ="" End If End Function |
我不认为函数在这一点上是相关的,而只是当公式中的变量发生变化时函数不重新计算的问题......
问题可能是 Excel 仅在其参数之一更改时才重新计算函数,并且您的 GetSysCd 函数所引用的范围不在其参数列表中
设置 sysCdTable = Worksheets("sys_cd").Range(sysCdTableName)
其中 sysCdTableName 只是一个字符串而不是一个引用。
您可以通过在每个函数的顶部添加