Excel VBA 中的 Len 函数未给出预期结果

tue*_*tla 0 excel vba

在我的代码中,我使用 len() 函数来获取分配给变量的数据内容的长度。在这里我发现了一些奇怪的行为 - 但首先查看我的代码,然后查看我的注释/问题。

Dim Array(1 To 3) As Integer

' some code

Array(1)=345

' some code

If len(Array(1)) = 3 Then
    ' do this (here is the expected code bunch)
Else
    ' do this (and here the unexpected code bunch)
End If
Run Code Online (Sandbox Code Playgroud)

谷歌引导我找到了MS len() 函数 ,在这里我用“或”读到了第一句话,(对我来说)没有进一步的解释,这让我有点困惑......

(Len 函数)返回一个 Long,其中包含字符串中的字符数存储变量所需的字节数。

在第二个谷歌推荐的网站上 ,我发现了非常有用的提示:

  • VBA Len 函数可以计算声明为字符串或变体的变量中的字符数
  • 如果 VBA Len 与整数、长整型、单精度或双精度一起使用,则 VBA Len 将计算存储变量所需的字节数

好的,但是如果变量是整数,我怎样才能获得数据内容的长度 - 就像我的代码片段中一样?

在这里,我在这些链接(Link_1Link_2TEXT() )中找到了使用and进行转换的建议CStr()- 第二个链接推荐CStr()了由于TEXT().

现在我的问题:

  • CStr()这是解决我的问题的正确方法吗?

  • 另一方面,由于我的研究,出现了一个额外的问题:如何从声明为字符串或变体的变量中获取已使用的字节数?

非常感谢您提前的帮助!

Fun*_*mas 6

当您使用Len字符串时,它会给出该字符串的长度。在立即窗口中输入:

? Len("123")
3
? Len("ABCDE")
5
Run Code Online (Sandbox Code Playgroud)

请注意,有一些字符存储为 2 个字节,请参阅/sf/answers/3879323101/,所以准确地说,Len将返回该字符串所需的字节数。

当您使用Len非字符串变量(您的数组包含整数)时,它将返回该变量使用的字节数。一个整数需要 2 个字节(好吧,从技术上讲,现在它使用 4 个字节,但这是一个不同的故事)。Long 将返回 4,Double 8 -无论这些变量中存储什么值。

您似乎想检查该数字是否包含 3 位数字:要么将数字转换CStr为字符串:

 If Len(CStr(Array(1))) = 3 Then
Run Code Online (Sandbox Code Playgroud)

或者(对我来说似乎更合理),直接检查值

 If Array(1) >= 100 And Array(1) <= 999 Then
Run Code Online (Sandbox Code Playgroud)