2008-08-05 74 views

回答

45

爲什麼不使用For Each?這樣你就不需要關心LBoundUBound是什麼。

Dim x, y, z 
x = Array(1, 2, 3) 

For Each y In x 
    z = DoSomethingWith(y) 
Next 
+7

您不能使用For Each來直接編輯數組單元,因爲在您的示例中`y`是數組單元的副本,而不是參考。對於數組編輯,`For i = LBound(arr)To UBound(arr)`將允許直接使用`arr(i)`引用單元格並編輯單元格內容(比如`arr(i)= Trim(arr ))`)。 – 2014-05-29 14:20:47

1

可能它來自VB6。因爲在VB6 Option Base語句,可以改變下界陣列是這樣的:

Option Base 1 

而且在VB6中,你可以改變下界特定陣列的是這樣的:

Dim myArray(4 To 42) As String 
1

我一直用於各...

16

有一個很好的理由不要使用For i = LBound(arr) To UBound(arr)

dim arr(10)分配陣列的十名一名成員,從0到10(假設VB6默認選項基礎)。

許多VB6程序員都假設該數組是基於一個數組,並且從不使用分配的arr(0)。我們可以通過使用For i = 1 To UBound(arr)For i = 0 To UBound(arr)來消除潛在的錯誤來源,因爲那麼清楚是否正在使用arr(0)

For each使每個數組元素的副本,而不是一個指針。

這有兩個問題。

  1. 當我們試圖給數組元素賦值時,它並不反映在原始數據上。此代碼將值47分配給變量i,但不影響arr的元素。

    arr = Array(3,4,8) 
    for each i in arr 
        i = 47 
    next i 
    Response.Write arr(0) '- returns 3, not 47

  2. 我們不知道一個數組元素的索引中for each,我們不能保證元素的順序(儘管它似乎是爲了。)

3

LBound可能並不總是0.

雖然無法創建一個數組,但VBScript中的下限不是0,但仍可以從COM組件中檢索變體數組可能指定了不同的LBound

這就是說我從來沒有遇到過這樣的事情。

相關問題