返回列表 上一主題 發帖

[發問] 陣列大小如何以變數替代

[發問] 陣列大小如何以變數替代

[版主管理留言]
  • GBKEE(2019/3/8 10:56): 看你的程式碼沒問題,可附檔讓大家看看

我想在儲存格輸入一個數值,來決定 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
Jess

ReDim Preserve Br(k)
改成>> ReDim Br(1 To k)
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

回復 2# 准提部林
准大,我試了,還是同樣出現偵錯。
擷取.PNG
2019-3-8 19:19
Jess

TOP

try .....

d(A & "") = Br

TOP

版主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
Jess

TOP

回復 4# jackyq
j大,同樣偵錯
Jess

TOP

貼出原始程式碼,活頁簿及工作表名稱有略做修改
  1. Option Base 1
  2. 開啟另一個非工作中活頁簿WK(以下省略).
  3. .
  4. .
  5. .

  6. With Sheets("Inventory Report")
  7. IRM1 = .[C4]
  8. IRM2 = .[C5]
  9. Set d = CreateObject("Scripting.Dictionary")
  10. Set d1 = CreateObject("Scripting.Dictionary")

  11. For Each A In .Range(.[A9], .[A6000].End(xlUp))

  12. Dim Ar(13), Br(24)
  13.     For i = 1 To 13
  14.     Ar(i) = A.Offset(, i).Value
  15.     Next i
  16.     d(A & "") = Ar
  17.    
  18.     For j = 1 To 24
  19.     Br(j) = A.Offset(, j + 159).Value
  20.     Next j
  21.     d1(A & "") = Br

  22. Next
  23. End With

  24. Workbooks("L.xlsm").Activate
  25. With Sheets("A INV Report")
  26. .[E10,G10,G11,G12:AR3000].ClearContents
  27. .[G10] = IRM1
  28. .[G11] = IRM2
  29. If .[H9] Like "* A *" Then: .[E10] = "A"
  30. If .[H9] Like "* B *" Then: .[E10] = "B"

  31.     For Each A In .Range(.[F12], .[F10000].End(xlUp))
  32.       If d.exists(A & "") Then
  33.       A.Offset(, 1).Resize(, 13) = d(A & "")
  34.       End If
  35.       If d1.exists(A & "") Then
  36.       A.Offset(, 15).Resize(, 24) = d1(A & "")
  37.       Else: A.Offset(, 1).Value = "查無此 PN"
  38.       End If
  39.     Next
  40. End With

  41. Erase Ar,Br
  42. Set d = Nothing
  43. Set d1 = Nothing
  44. End Sub
複製代碼
Jess

TOP

不是只有 Array
以下也會產生 "陣列索引超出範圍"

Workbooks("不存在的wb").Activate
Sheets("不存在的ws").Select

TOP

回復 8# jackyq
原始程式執行沒有問題,我只是想把原本的Br陣列(大小固定為24個元素)改成可依儲存格輸入的數值隨意變動大小
Jess

TOP

本帖最後由 jackyq 於 2019-3-8 22:03 編輯

' 有可能你的 k值 出現 <=0
' 你可以試試下面

Option Base 1  

Sub QX9650_____()

Dim a()


k = 10
ReDim a(k)

k = 1
ReDim a(k)

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

TOP

        靜思自在 : 吃苦了苦、苦盡廿來,享福了福、福盡悲來。
返回列表 上一主題