ReDim语句是否使用空字符串初始化字符串数组?
鉴于VBA以下语句:
假设val = 4
和Option Base 0
ReDim语句是否使用空字符串初始化字符串数组?
Dim dataStr() As String
ReDim dataStr(val)
将ReDim语句初始化字符串数组dataStr至5个空字符串元素(0至4)。
执行ReDim语句后,Array的内容到底是什么。
Sub RedimStringArray()
Dim Val As Integer
Dim dataStr() As String
Dim idx As Long
Val = 4
ReDim dataStr(Val)
For idx = LBound(dataStr) To UBound(dataStr)
Debug.Print idx, """" & dataStr(idx); """", TypeName(dataStr(idx)), Len(dataStr(idx))
Next
End Sub
给了我这样的:
0 "" String 0
1 "" String 0
2 "" String 0
3 "" String 0
4 "" String 0
所以我会说,是的,使用ReDim重新初始化与空字符串数组。
为什么“Dim idx As Long”,为什么不“Dim idx As Integer” – 2009-10-18 15:06:40
至少在Win32上的Excel中,Long是“本地”VBA整数类型; Integer只是被转换为Long。因此,默认情况下,通常会将整型变量声明为Long。将一个变量声明为Integer意味着你实际上希望VBA将它当作一个对象,如果将其赋值为32768等会引发溢出错误。 – jtolle 2009-10-18 16:51:16
只是为了确认从麦克豪斯的答案,请参阅VBA语言规范的5.4.3.3节:
http://msdn.microsoft.com/en-us/library/dd361851%28PROT.10%29.aspx
在< REDIM语句> 每个阵列根据调整大小尺寸 在其<边界列表中指定。 除非单词“preserve”是 指定,否则阵列中的每个元素都会重置为其数据类型的默认值 , 。
您可以阅读VB6 manual page on ReDim?
当变量被初始化,一个 可变长度的字符串被初始化 到一个零长度的字符串(“”),和一个 固定长度字符串填充有 零
“固定长度的字符串填充零”听起来很奇怪。我猜“零”是指Chr $(0)。 – onedaywhen 2009-10-19 13:15:41
......固定长度的字符串数组没有初始化为零长度字符串的好处。 – onedaywhen 2009-10-19 13:18:03
是的,它是Chr $(0)。这听起来像VB6运行时用零填充数组的整个内存块。所以数字变为零,指针变为空,但固定长度的字符串变为Chr $(0)。 – MarkJ 2009-10-19 14:41:09
你可以跳过Dim,只需使用'ReDim dataStr(val)As String'。与'Option Explicit'一起使用。智能感知虽然有些怪异。 – wqw 2009-10-18 12:48:42
您**可以跳过Dim,但VB6手册会警告它。 http://msdn.microsoft.com/en-us/library/aa266231(VS.60).aspx – MarkJ 2009-10-18 21:36:48