关于vba:Excel公式计算一次然后删除

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 只是一个字符串而不是一个引用。


您可以通过在每个函数的顶部添加Application.Volatile True来使函数实时重新计算。