通过创建定义为固定长度字符串的变量,每个单元格或范围使用的字节数是多少?

By creating a Variable that is defined as a string with a fixed-length, is the used bytes per cell or range?

作为 Excel 的新用户,如果固定长度的字符串具有按范围或单元分配的内存,我似乎找不到任何确认。

我认为它是每个范围,因为我无法创建一个固定长度的字符串并将范围设置为一行中的最后一个单元格。

例如:

Dim HilvlActivity as String * 3
HilvlActivitySource = Range("F3", "F:F").End(xlDown).Row

而不得不使用

Dim HilvlActivity as String * 5000
HilvlActivitySource = Range("F3", "F:F").End(xlDown).Row

所以我的问题基本上是:分配的固定长度定义是每个单元格(例如:F3)还是整个分配范围?

我可能想多了,或者应该更有效地对行尾进行编码(稍后会更改)。但这仍然是一个我想确保自己理解的基本概念。我查看的一些信息是 John Walkenbach 的 Power Programming with VBA,Microsoft (https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/data-types/string-data-type), PowerSpreadSheets (https://powerspreadsheets.com/vba-data-types/#Long-VBA-Data-Type) 的书,但似乎仍然找不到正确的答案。

任何人都知道任何真正深入可变细节的好资源,我们将不胜感激。否则,感谢您的帮助! :)

Dim a as String * 10 表示字符串 a 的长度始终为 10,如果分配的值超过此长度,它将被剪切到第一个 10字符。

这说明了这一点:

Public Sub TestMe()

    Dim a   As String * 3
    Dim b   As String
    Dim c   As String * 10

    a = "ABCD"
    b = "ABCD"
    c = "ABCD"

    Debug.Print a                    'ABC
    Debug.Print b                    'ABCD
    Debug.Print Len(c)               '10  
    Range("A1") = StrReverse(c)      '      DCBA in range "A1" with 6 empty spaces upfront

End Sub

嗯,首先:您没有在任何地方将 HilvlActivitySource 定义为变量...

fixed-length-string 的长度应用于字符串变量本身。例如:

Dim HilvlActivity as String * 3
HilvlActivity = ActiveSheet.Range("F3").Value
MsgBox Len(HilvlActivity)

始终显示消息3 - 如果 F3 包含的字符少于 3 个,则将在末尾添加空格。如果 F3 包含 个字符,则只存储前 3 个字符。