簡體   English   中英

數組下標超出范圍錯誤 - 不知道為什么?

[英]Subscript out of range error with an array - no idea why?

我已經將數組聲明為Dim rArray() As Variant但是當我嘗試使用存儲在其中的值時(如下所示),我得到一個下標超出范圍錯誤。 UBound(rArray)LBound(rArray)都返回值 14 和 1,但錯誤發生在Debug.Print行。

如果我使用如下的 for 語句

For Each rArr in rArray

然后它可以正常工作,但是出於創建此數組的目的,我需要 select 以該順序存儲的每個項目的靈活性 - 這意味着我需要使用下標來引用它們。

我已經嘗試了多種方法來嘗試解決這個問題,但沒有成功,我花了將近半天的時間來解決這個問題。 誰能指出我需要改變什么才能讓它工作。

Set rng = Range("D4", Range("D4").End(xlDown))
rng.NumberFormat = "0"
rArray = rng.Value

For x = UBound(rArray) To LBound(rArray) Step -1
    Debug.Print rArray(x)
Next x

編輯:另一個值得一提的事實是,他的數組是在 Function 中聲明和使用的,但它不會從 function 傳遞或傳遞給 function。 不能在函數中聲明和使用 arrays 嗎?

當您將工作表值分配給變體數組時,您總是會得到一個基於1的二維數組(例如,1 到某物,1 到某物;0 到某物,0 到某物)。 如果您從單列獲取值,則第二個排名僅為 1 比 1。

這可以通過以下來證明。

Dim x As Long, rArray As Variant, rng As Range

Set rng = Range("D4", Range("D4").End(xlDown))
rng.NumberFormat = "0" 'don't really understand why this is here
rArray = rng.Value

Debug.Print LBound(rArray, 1) & ":" & UBound(rArray, 1)
Debug.Print LBound(rArray, 2) & ":" & UBound(rArray, 2)

For x = UBound(rArray, 1) To LBound(rArray, 1) Step -1
    Debug.Print rArray(x, 1)
Next x

所以你需要詢問數組第一列的元素; 僅僅要求元素是不夠的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM