返回列表 上一主題 發帖

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

我修改程式時一開始就把U1的值指定給k了-->  k = [U1].Value,而U1的值確定是大於等於1的。(實際工作時U1的輸入值必定是大於等於24)
Jess

TOP

' 有可能你的 k值 出現
jackyq 發表於 2019-3-8 21:54

雖然沒有出現偵錯,但是查詢結果變成這樣
Jess

TOP

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
就沒問題了
Jess

TOP

本帖最後由 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)

TOP

回復 5# jesscc

我在想是不是轉資料的部分有誤

自行偵錯看看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Br() As String, k%, D As Object, A As Range, J As Integer
  4.     On Error GoTo RR   '程式有錯誤時到指定行號(RR)
  5.     k = [U1].Value
  6.     Set D = CreateObject("Scripting.Dictionary")
  7.     For Each A In Range([A9], [A6000].End(xlUp))
  8.         ReDim Preserve Br(k)
  9.         For J = 1 To k
  10.             Br(J) = A.Offset(, J + 159).Value
  11.         Next J
  12.         D(A & "") = Br(k)
  13.     Next
  14.     Exit Sub
  15. RR:
  16.    Application.VBE.Windows("區域變數").Visible = True
  17.    
  18.    Stop
  19.    '程式暫停 查看所有變數看看錯誤在哪裡
  20. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 盡多少本份,就得多少本事。
返回列表 上一主題