Excel:使用UDF时出现单个#VALUE错误

问题描述 投票:0回答:1

[我知道“ Excel公式未更新”这一主题已经在许多论坛上进行了很多讨论,但是我还没有找到解决问题的有用方法。

在工作表中,我在工作表的模块中使用内置的Excel公式以及用VBA编写的自己的函数,并在工作表中引用它们。

编辑:

[有一个二进制代码是从单元格A1中的十六进制代码生成的。在单元格B1中计算出二进制代码。

以下面的代码为例:100001101110

单元格C1包含以下内容:

= DecodeVal(B1; 0; 20)

如果现在将十六进制代码粘贴到A1中,并且在B1中创建了二进制代码,则单元格C1将显示#VALUE!错误。

如果返回单元格A1,请在文本框中单击,然后再次按Enter,将显示正确的值(= 2158)。

为什么一开始会出现值错误,但是如果再按一次输入就不会出现?

这是我指的功能:

Public Function DecodeVal(value, start As Integer, length As Integer) As Long
Dim abschnitt As String
Dim i As Integer
Dim valueText As String

    valueText = value.Text
    If (Len(valueText) - start - length + 1 > 0) Then
        abschnitt = Mid(valueText, Len(valueText) - start - length + 1, length)
    Else
        If (Len(valueText) > start) Then
            abschnitt = Left(valueText, Len(valueText) - start)
            length = Len(valueText) - start
        End If
    End If

    Do
        If (Int(Left(abschnitt, 1)) = 1) Then
            DecodeVal = DecodeVal * 2 + 1
        Else
            DecodeVal = DecodeVal * 2
        End If
        abschnitt = Right(abschnitt, length - 1)
        length = length - 1
    Loop While length > 0


End Function

是,计算选项设置为自动。

有什么建议吗?

谢谢

excel vba excel-formula updating
1个回答
1
投票

请注意,UDF(用户定义的函数)仅在以下情况下自动运行。想象以下功能:

Option Explicit

Public Function Test1(MyVal As Long) As Long
    Test1 = MyVal + 1
End Function

并且想象它是由单元格B2中的公式=Test1(A1)调用的。”>

现在,此公式仅在B2依赖的单元格的值变化时重新计算。在这种情况下,只有A1发生变化!这是为了减少计算到必要的部分。例如,如果A2发生变化,则公式=Test1(A1)中不涉及此内容,因此不需要重新计算。因此我们不这样做是为了节省时间,并且由于公式的结果无论如何都不会改变。

您可以通过在函数中添加Application.Volatile来强制对any

单元格更改重新计算UDF(或对任何单元格进行计算)。但这将导致沉重的开销,因为即使一个单元格具有公式=A1+1,无论是否需要,这都将触发您的UDF。

我建议不要使用.Volatile,除非您对它进行了不错的研究并且真的知道how

why会使用它。在极少数情况下,真正需要它并且应该不惜一切代价避免,因为它会减慢对工作表的任何计算比可能需要的多得多。为避免这种情况,请仅在极少数情况下无法使用其他解决方案。
© www.soinside.com 2019 - 2024. All rights reserved.