Excel不再计算我的字段

时间:2018-03-27 15:02:28

标签: excel excel-vba vba

我编写了一个简单的VBA函数,用于在键/值对的长表中按键查找值。然后它将该值作为Double返回:

Public Function GetValue(sheet As String, key As String) As Double
    Dim WS As Worksheet
    Dim K As Range
    GetValue = 0
    Set WS = ThisWorkbook.Worksheets(sheet)
    If WS Is Nothing Then Exit Function
    Set K = FindKeyAnywhere(WS, key)
    If K Is Nothing Then Exit Function
    GetValue = WS.Cells(K.Row, 5).Value
End Function

我在摘要表中有大约60个这样的公式:

=GetValue("Data", B$41)

其中“数据”是包含键/值的页面名称,而B $ 41是键。一切都很完美,然后......

我胖了一下VBA,将= 0改为= o并且打了个电话。现在摘要中的每个单元格仍然说#VALUE。当我意识到发生了什么时,我修复了错误并重新开始。但是,摘要中的每个单元格仍然说#VALUE

如果我点击单元格并点击返回,它就会更新。

我检查过,自动计算 已开启。我还点击了几次计算表。什么都没有。

所以我去了每个单元格并点击返回,所以它们都被更新了。现在他们没有说#VALUE,但是当我在数据页面上更改数据时,它们仍然没有更新。

我有什么特别的遗失吗?似乎Excel被“卡住”认为计算无效。

更新

使用命名范围不能很好地工作,因为必须在每个公式中键入它。考虑...

        KEY1                KEY2                 ANOTHERKEY
Data1 =GetValue(A$1,B$1)
Data2

当用户CnP或拖动填充该公式时,它将自动获取密钥和表单。如果我们使用范围名称,他们必须在每个单元格中键入名称,并且有数百个。

有没有办法获取字符串并返回命名范围?与=Range(A1)

一样

2 个答案:

答案 0 :(得分:1)

正如John Coleman所说:Excel不知道当数据表上的某些内容发生变化时需要重新计算,因为UDF的先例不包括数据表中的范围信息。

你需要:

  • 要么使功能挥发 - 但这有重新计算错误 后果。
  • 或传递包含信息的数据表上的范围 而不是传递一个字符串。这是最好的解决方案。

答案 1 :(得分:0)

根据您的更新,我认为您正在寻找INDIRECT,它可以将字符串转换为范围。

但INDIRECT有一些主要的缺点:它的易失性,单线程并且在用户提供的字符串不存在时表现不佳。

恕我直言,这不是一个好的方向:我建议你考虑重新设计你的数据/算法。

相关问题