2014-09-30 100 views
0

我有一个Excel式:Excel公式计算一次,然后删除

=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代码中的东西吗?如何使该公式保持原状,如果某些数值发生变化,公式会重新计算?

在此先感谢。

这里有两个功能:

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 

我不认为功能是在这一点上相关,而只是一个功能的事情不重新计算当式变化的变量...

+0

发布您的代码。我的猜测是你将值赋给单元格而不是函数本身。 – 2014-09-30 19:37:26

+0

我已经添加了 – 2014-09-30 19:41:15

+0

问题在于它没有重新计算......但我应该提到公式在计算一次之后就消失了......我如何将公式存放在初学者那里,然后如何得到它重新计算是我需要帮助 – 2014-09-30 20:57:03

回答

1

的问题可能是Excel中,当它们的参数的变化之一,和你的GetSysCd功能指的是不在其参数列表

设置sysCdTable =工作表(“sys_cd”)的范围只重新计算功能。范围(sysCdTab leName)

其中sysCdTableName只是一个字符串而不是引用。

+0

如何将sysCdTableName chnage引用到引用? – 2014-09-30 20:44:01

+0

Excel正在删除该公式。计算一次后没有公式......你知道为什么计算一次后会删除公式吗? – 2014-09-30 20:59:00

+1

Public Function GetSysCd(ByVal name As String,sysCdTable As Range)。 Excel本身不会删除公式,所以它必须是某个VBA的某个位置(可能是Paste Special Values) – 2014-10-01 08:04:49

0

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

+0

我已经将Application.Volatile True添加到这两个函数的顶部,并且结果与更改mtr_make_model值时保持不变...似乎没有工作。 – 2014-09-30 20:41:26