返回列表 上一主題 發帖

關於動態陣列程式碼的問題

回復 3# oak0723-1
  1. Private Sub CommandButton2_Click()
  2. Dim a, r%, i%, arr()
  3.     a = Sheets("1").[c10].CurrentRegion
  4.     r = 1
  5.     For i = 1 To UBound(a)
  6.         ReDim Preserve arr(1 To 3, 1 To r)
  7.         arr(1, r) = a(i, 1): arr(2, r) = a(i, 2): arr(3, r) = a(i, 3)
  8.         r = r + 6
  9.     Next
  10.     [j9] = r
  11.        For j = 1 To UBound(arr, 2)
  12.    For i = 1 To 3
  13.       mystr = mystr & "," & arr(i, j)
  14.       Next: Next
  15.       MsgBox mystr


  16. End Sub

  17. Private Sub CommandButton3_Click()
  18. Dim a, r%, i%, arr()
  19.     a = Sheets("1").[c10].CurrentRegion
  20.     r = 1
  21.     For i = 1 To UBound(a)
  22.         ReDim arr(1 To 3, 1 To r)
  23.         arr(1, r) = a(i, 1): arr(2, r) = a(i, 2): arr(3, r) = a(i, 3)
  24.         r = r + 6
  25.     Next
  26.    [j12] = r
  27.    For j = 1 To UBound(arr, 2)
  28.    For i = 1 To 3
  29.       mystr = mystr & "," & arr(i, j)
  30.       Next: Next
  31.       MsgBox mystr
  32. End Sub
複製代碼
分別執行此2程序就知 道Preserve的效果
學海無涯_不恥下問

TOP

回復 5# oak0723-1

arr是個二維陣列
ReDim arr(1 To 3, 1 To r)跟
ReDim Preserve arr(1 To 3, 1 To r)
都是在改變arr陣列的第2維數量
只不過當每次redim後若沒有使用preserve關鍵字
則會清除所有陣列元素內容
但數量還是有增加
所以你測試2個程序後有使用preserve關鍵字的程序
msgbox內容會有你要的文字
只有redim的程序都只有逗號(表示arr的內容都是空值)
所以[j9][j12]會得到相同的值
也就是arr陣列的第二維大小
學海無涯_不恥下問

TOP

回復 7# oak0723-1


    你r每次加6你說會跑遍每個陣列元素嗎?
你要去思考變數的變化值
逗號是因為我程式中mystr是將陣列元素用逗號連接
當元素是空值時自然只產生逗號沒有值
學海無涯_不恥下問

TOP

回復 10# oak0723-1


    用F8逐行來看變數變化
你才會了解迴圈
學海無涯_不恥下問

TOP

        靜思自在 : 做該做的事是智慧,做不該做的事是愚癡。
返回列表 上一主題