[我知道“ 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
是,计算选项设置为自动。
有什么建议吗?
谢谢
请注意,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
=A1+1
,无论是否需要,这都将触发您的UDF。 我建议不要使用.Volatile
,除非您对它进行了不错的研究并且真的知道how