Board logo

標題: [發問] 詢問陣列程式哪裡錯誤 [打印本頁]

作者: naruto018    時間: 2017-4-8 15:05     標題: 詢問陣列程式哪裡錯誤

出現  陣列索引超出範圍
顯示錯誤範圍   ---->  ReDim Preserve 文本A(1 To n, 1 To 2)
我看不出有甚麼問題
想問各位大大是哪裡出錯了以及如何改正
  1. Public Sub 測試3()
  2. Dim 文本(), 文本A()
  3. With Worksheets("1111")

  4. n = 0
  5. 文本 = .Range("P3").Resize(4, 2).Value
  6. For i = 1 To 4
  7.     If 文本(i, 2) <> Empty Or 文本(i, 2) <> "無" Then
  8.         n = n + 1
  9.         
  10.         ReDim Preserve 文本A(1 To n, 1 To 2)
  11.         For c = 1 To 2
  12.             文本A(n, c) = 文本(i, c)
  13.             
  14.         Next
  15.     End If
  16. Next

  17. End With
  18. End Sub
複製代碼
[attach]26975[/attach]
作者: c_c_lai    時間: 2017-4-8 20:03

回復 1# naruto018
試試看!
Public Sub 測試3()
    Dim 文本(), 文本A()
   
    With Worksheets("1111")
        n = 0
        文本 = .Range("P3").Resize(4, 2).Value
        For i = 1 To 4
            If 文本(i, 2) <> Empty Or 文本(i, 2) <> "無" Then
                n = n + 1
        
                '  ReDim Preserve 文本A(1 To n, 1 To 2)
                ReDim Preserve 文本A(1 To 2, 1 To n)
                For c = 1 To 2
                    '  文本A(n, c) = 文本(i, c)
                    文本A(c, n) = 文本(i, c)
                Next
            End If
        Next
    End With
End Sub
作者: naruto018    時間: 2017-4-9 09:14

回復 2# c_c_lai


    感謝大大幫助,修改後測試OK
想問一下大大為什麼我修改前會不行
而轉置後卻可以呢?
作者: c_c_lai    時間: 2017-4-10 06:07

回復 3# naruto018
你用偵測模式便可解或了
ReDim Preserve 文本A(1 To n, 1 To 2) 的變化,
與 ReDim Preserve 文本A(1 To 2,, 1 To n)
作者: c_c_lai    時間: 2017-4-10 18:20

回復 3# naruto018
可參考:
http://yes.nctu.edu.tw/vb/0_Basis/Variable/ReDim.htm
作者: jackyq    時間: 2017-4-10 19:43

回復 3# naruto018


因為 VBA 偷懶
底層沒寫搬遷過程
自然無法  ReDim Preserve 文本A(1 To n, 1 To 2)

同理亦無法
ReDim 文本A(1 To 10)
ReDim Preserve 文本A( -10 To 10)
作者: naruto018    時間: 2017-4-11 08:18

回復 5# c_c_lai


    感謝c大的提供的網址
原來是這樣

當使用 Preserve 保留字時,您只能改變多維陣列中最後一維的上界;如果改變了其它維數或最後一維的下界,則會發生執行階段的錯誤。

作者: naruto018    時間: 2017-4-11 08:25

回復 6# jackyq


    感謝J大的解說
我已了解了




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)