在Excel

时间:2016-09-01 13:43:34

标签: excel vba excel-vba csv

我有一个大型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到单元格的依赖树?或者,是否有更明智的方法来做到这一点?

1 个答案:

答案 0 :(得分:2)

我找到的解决方案是添加行

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