Excel:使用UDF时出现单值错误
我知道“Excel公式不更新”这个话题在很多论坛上都讨论过很多,但我还没有找到解决问题的有效方法 在工作表中,我在工作表的模块中使用内置Excel公式以及用VBA编写的自己的函数,并在工作表中引用它们 编辑: 单元格A1中有一个由十六进制代码生成的二进制代码。二进制代码在单元格B1中计算 让我们以下面的代码为例:10000101110 单元格C1包含以下内容: =DecodeVal(B1;0;20) 如果我现在将一个十六进制代码粘贴到A1中,并在B1中创建二进制代码,那么单元格C1将显示一个Excel:使用UDF时出现单值错误,excel,vba,excel-formula,updating,Excel,Vba,Excel Formula,Updating,我知道“Excel公式不更新”这个话题在很多论坛上都讨论过很多,但我还没有找到解决问题的有效方法 在工作表中,我在工作表的模块中使用内置Excel公式以及用VBA编写的自己的函数,并在工作表中引用它们 编辑: 单元格A1中有一个由十六进制代码生成的二进制代码。二进制代码在单元格B1中计算 让我们以下面的代码为例:10000101110 单元格C1包含以下内容: =DecodeVal(B1;0;20) 如果我现在将一个十六进制代码粘贴到A1中,并在B1中创建二进制代码,那么单元格C1将显示一个#值
#值代码>错误
如果返回到单元格A1,在文本框中单击并再次按enter键,将显示正确的值(=2158)
为什么一开始会有一个值错误,但如果我再按一次enter键就不会了
这就是我所指的功能:
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
是,计算选项设置为自动
有什么建议吗
谢谢我建议正确声明变量,不要使用Value
作为变量名,因为它很容易与Range().Value
混淆。另外,我建议在VBA中使用Integer
没有任何好处
最后,valueText=value.Text
似乎出现了一些问题。如果使用单元格/区域对象的.Text
,则可能会干扰设置为该单元格的numberformat。我建议改用ValueText=CStr(ValueCell.Value)
所以你最终会得到这样的结果:
Option Explicit
Public Function DecodeVal(ValueCell As Range, Start As Long, Length As Long) As Long
Dim Abschnitt As String
Dim i As Long
Dim ValueText As String
ValueText = CStr(ValueCell.Value)
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 (CLng(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的代码中)