我知道“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
错误。请参阅下面的快照。
如果调整列宽并重新计算,就会显示正确的结果。
要解决此问题,请使用 valueText = value.Value2
或 valueText = value.Value
而不是 valueText = value.Text
。
此外,我建议使用类似 RngValue
作为声明的变量/参数,而不是 value
,它也是 Range 属性(因为它可能会导致冲突)。
关于Excel:使用 UDF 时出现奇怪的 #VALUE 错误行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60756809/