Excel:使用 UDF 时出现奇怪的 #VALUE 错误行为

标签 excel vba

我知道“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

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

有什么建议吗?

谢谢

最佳答案

不推荐使用Range.Text。当输入列的宽度小于数据并且单元格显示 ###### 时,这尤其会导致错误。如果公式计算的话会返回#VALUE错误。请参阅下面的快照。

enter image description here

如果调整列宽并重新计算,就会显示正确的结果。

enter image description here

要解决此问题,请使用 valueText = value.Value2valueText = value.Value 而不是 valueText = value.Text

此外,我建议使用类似 RngValue 作为声明的变量/参数,而不是 value,它也是 Range 属性(因为它可能会导致冲突)。

关于Excel:使用 UDF 时出现奇怪的 #VALUE 错误行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60756809/

相关文章:

excel - 从关闭的 Excel 文件中获取公式(不仅仅是值)

excel - 在Excel中将4位数字转换为时间格式

javascript - table2excel jQuery 插件生成的 Excel 文件在打开时抛出错误

excel - 如何在不包含 ActiveXButton 的情况下复制/粘贴工作表数据

excel - "Out of Stack Space"简单的Worksheet_Calculate触发的错误

vba - 微软Word : Change Font of Characters Missing In Default Font

vba - 仅将填充单元格中的值复制到不同的工作表,在最后一个填充值之后没有额外的行

python - 比较来自不同 excel 文件的列,并在每个文件的开头添加一列与输出

Java Duration 给 Excel 带来不同的结果

ms-access - 从另一个数据库 Access SQL 查询