2009-10-18 89 views
0

鑑於VBA以下語句:
假設val = 4Option Base 0ReDim語句是否使用空字符串初始化字符串數組?

Dim dataStr() As String 
ReDim dataStr(val) 

將ReDim語句初始化字符串數組dataStr至5個空字符串元素(0至4)。
執行ReDim語句後,Array的內容到底是什麼。

+1

你可以跳過Dim,只需使用'ReDim dataStr(val)As String'。與'Option Explicit'一起使用。智能感知雖然有些怪異。 – wqw 2009-10-18 12:48:42

+1

您**可以跳過Dim,但VB6手冊會警告它。 http://msdn.microsoft.com/en-us/library/aa266231(VS.60).aspx – MarkJ 2009-10-18 21:36:48

回答

1
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重新初始化與空字符串數組。

+0

爲什麼「Dim idx As Long」,爲什麼不「Dim idx As Integer」 – 2009-10-18 15:06:40

+1

至少在Win32上的Excel中,Long是「本地」VBA整數類型; Integer只是被轉換爲Long。因此,默認情況下,通常會將整型變量聲明爲Long。將一個變量聲明爲Integer意味着你實際上希望VBA將它當作一個對象,如果將其賦值爲32768等會引發溢出錯誤。 – jtolle 2009-10-18 16:51:16

1

只是爲了確認從麥克豪斯的答案,請參閱VBA語言規範的5.4.3.3節:

http://msdn.microsoft.com/en-us/library/dd361851%28PROT.10%29.aspx

在< REDIM語句> 每個陣列根據調整大小尺寸 在其<邊界列表中指定。 除非單詞「preserve」是 指定,否則陣列中的每個元素都會重置爲其數據類型的默認值 , 。

2

您可以閱讀VB6 manual page on ReDim

當變量被初始化,一個 可變長度的字符串被初始化 到一個零長度的字符串(「」),和一個 固定長度字符串填充有 零

+0

「固定長度的字符串填充零」聽起來很奇怪。我猜「零」是指Chr $(0)。 – onedaywhen 2009-10-19 13:15:41

+0

......固定長度的字符串數組沒有初始化爲零長度字符串的好處。 – onedaywhen 2009-10-19 13:18:03

+0

是的,它是Chr $(0)。這聽起來像VB6運行時用零填充數組的整個內存塊。所以數字變爲零,指針變爲空,但固定長度的字符串變爲Chr $(0)。 – MarkJ 2009-10-19 14:41:09