PDA

View Full Version : Hỏi cách sử dụng Dim



CAUBEBUTCHI
11-12-2004, 13:50
Cho mình hỏi Redim và Redim Preserve khác nhau ở chỗ nào. Nếu có thể, các bạn làm ơn cho mình ví dụ nha. Cảm ơn nhiều!

nganha
12-12-2004, 11:02
Các câu lệnh trên được sử dụng khi bạn cần làm việc với mảng động (Dynamic Array) trong các procedures (Sub, Function)
Ví dụ:
Dim Array1() As Integer ' Khai báo mảng
Sub Abc()
....
intX=9
ReDim Array1(intX) ' Tạo một mảng rỗng có 10 phần tử để chứa 10 giá trị là số Integer.
....
End Sub
VB thiết lập lại giá trị cho các phần tử của mảng như sau:
1. Empty value (Mảng các Variant)
2. Zero (0) (Mảng các giá trị số)
3. Zero-length string (Mảng các chuỗi)
4. Nothing (Mảng các đối tượng).
Câu lệnh ReDim Preserve được sử dụng khi bạn muốn định lại kích cỡ của mảng động nhưng không muốn làm mất các giá trị đã lưu trong mảng.
Ví dụ:
Sub Abc()
....
intX = 9
ReDim Array1 (intX) 'Tạo một mảng rỗng có 10 phần tử để chứa 10 giá trị là số Integer.
....
'Gán giá trị cho các phần tử của mảng Array1
....
'Tăng kích thước của mảng thêm một phần tử mà không đánh mất các giá trị đã lưu.
ReDim Preserve Array1 (UBound(Array1) + 1)
....
End Sub
Lưu ý bạn là chỉ có thể tăng (giảm) kích thước biên trên (Upper bound) của chiều cuối cùng (Last Dimension) trong mảng động.
Ví dụ:
Mảng động hai chiều Array1() có kích thước hiện tại là Array1(9,19) = 10*20 = 200 phần tử (gồm các phần tử Array1(0,0), ...,Array1(9,19)... thì bạn có thể thay đổi kích thước này theo biên độ trên của chiều thứ hai trong mảng đã cho như sau:
ReDim Preserve Array1(9, UBound(Array1, 2) + 1) ' OK, tạo lại mảng có kích thước 10*21 = 210 phần tử và bảo toàn giá trị của 200 phần tử cũ.

Nhưng bạn không thể thay đổi theo biên trên của chiều thứ nhất trong mảng như thế này:
ReDim Preserve Array1(UBound(Array1, 1) + 1, 19) ' Lỗi run-time 9: Subscript out of range.
hay thay đổi theo biên dưới (Lower bound) của bất kỳ chiều nào.