我想在儲存格輸入一個數值,來決定 Br 陣列的大小,然後把陣列的元素存入字典裡,但是出現了"陣列索引超出範圍"的提示,請問各位大大是哪裡出錯了?
Dim Br() As String,k%
k = [U1].Value
Set d = CreateObject("Scripting.Dictionary")
For Each A In Range([A9], [A6000].End(xlUp))
ReDim Preserve Br(k)
For j = 1 To k
Br(j) = A.Offset(, j + 159).Value
Next j
d(A & "") = Br(k)
Next作者: 准提部林 時間: 2019-3-8 10:43
版主GBKEE
因為這程式是要按設定好的路徑開啟另一個活頁簿去抓資料,所以範例檔很難做,我在想是不是轉資料的部分有誤,我再貼出轉資料的部分如下
For Each A In .Range(.[F12], .[F10000].End(xlUp))
If d.exists(A & "") Then
A.Offset(, 15).Resize(, k) = d(A & "")
Else: A.Offset(, 1).Value = "查無此 PN"
End If
Next作者: jesscc 時間: 2019-3-8 19:38
k = 0
ReDim a(k) '你把陣列下限設為 1 , 結果變成 Redim a(1 to 0)
End Sub
' If k >= 1 Then
' For Each a In .Range(.[A9], .[A6000].End(xlUp))
' ReDim Br(k)
'
' For j = 1 To k
' Br(j) = a.Offset(, j + 159).Value
' Next j
' d1(a & "") = Br
' Next
' End If作者: jesscc 時間: 2019-3-8 22:10
我修改程式時一開始就把U1的值指定給k了--> k = [U1].Value,而U1的值確定是大於等於1的。(實際工作時U1的輸入值必定是大於等於24)作者: jesscc 時間: 2019-3-8 22:34
If k >= 1 Then
' For Each a In .Range(.[A9], .[A6000].End(xlUp))
' ReDim Br(k)
'
' For j = 1 To k
' Br(j) = a.Offset(, j + 159).Value
' Next j
' d1(a & "") = Br
' Next
' End If
不好意思,j大。測試已OK,是我少修改了一個地方。不過我還是不太明白為什麼加了這段
If k >= 1 Then
.
.
End If
就沒問題了作者: jackyq 時間: 2019-3-8 23:17
本帖最後由 jackyq 於 2019-3-8 23:19 編輯
(1)
k=0 時
會變成 Redim Br(1 To 0) '--> VBA 沒有辦法配置這種陣列
IF K>=1 Then ..... End if 可以防止 執行到 Redim Br(1 To 0)
(2)
儘量不要去使用 Option Base 1 這種東西
最好直接寫成 Redim Br(1 To K)作者: GBKEE 時間: 2019-3-9 09:08