Mảng trong Excel VBA

  • Thread starter Thread starter potter
  • Ngày gửi Ngày gửi
Liên hệ QC

potter

Thành viên mới
Tham gia
31/1/08
Bài viết
5
Được thích
1
Em đang viết 1 đoạn VBA khai báo mảng (kiểu mảng động) và gán các giá trị vào mảng mà bị báo lỗi, Lỗi được báo là : Compile error: Can't change data types of array elements. Không biết sửa phần này như thế nào, mong anh em chỉ giáo. Hic! Chiêu cơ bản mà cũng không làm được. Em chụp hình sẵn lên rồi đây:
Hình chụp đoạn code:
122200931112pm.png
[/URL] [/IMG]
Hình chụp bảng excel:
122200931202pm.png
[/URL] [/IMG]
Hình chụp lỗi đoạn code:
122200933148pm.png
[/URL] [/IMG]
Còn đây là file excel up lên cho anh em tham khảo:
http://www.mediafire.com/?jnyyyztkdmy
 
Lần chỉnh sửa cuối:
Bạn có thể nói cho mình biết mục đích bạn đưa dữ liệu vào mãngVBA để làm gì không?

Theo dữ liệu kiểu này thì mình viết code như sau:
Mã:
 Sub chay()
Dim mng() As String, i As Byte, j As Byte
ReDim mng(Sheet2.[J300].End(xlUp).Row - 4, 4)
For j = 10 To 14
For i = 4 To Sheet2.[J300].End(xlUp).Row
    mng(i - 4, j - 10) = Sheet2.Cells(i, j).Value
Next i
Next j
If j = 15 Then
MsgBox mng(100, 4)
End If
End Sub
Thân.
 
Upvote 0
Trước hết chỉ ra vài cái sai dẫn đến lỗi:

1. ReDim không được dùng As Double (Đã báo lỗi). Hãy khai báo Double trong Dim

2. ReDim nằm ngoài Do, vậy chỉ Redim có 1 lần, X1 chỉ có 1 phần tử.

2. i = 1 nằm ngoài vòng Do, nhưng trong Do không tăng i lên, biết đến bao giờ mới thoát?
(Sẽ không báo lỗi, mà chạy đến khi mòn mỏi)

3. Mảng 1 chiều mặc định là mảng ngang. Muốn tạo mảng dọc phải khai báo mảng 2 chiều 1 cột. (Sẽ không báo lỗi mà chỉ ra kết quả sai khi gán xuống sheet thôi)

4. Thay cho Do phải ReDim nhiều lần và phải Preserve, tốt nhất là ReDim 1 lần không Preserve, sau đó dùng For giống như Po_Pikachu làm.
 
Upvote 0
Ah, hoá ra cái lỗi được báo là trong phần Redim có As Double. Thank các tiền bối nhiều!
@ Po_Pikachu: Mình muốn khai báo dữ liệu các điểm x1, x2, y1, y2 thành các mảng riêng, cụ thể, mảng X1(), X2(), Y1(), Y2()- có thể hiểu như là toạ độ của điểm đầu & cuối các đoạn thẳng.
@ ptm0412: Cảm ơn đã chỉ mình cái lỗi, vì cái lỗi đó mà mình đánh vật với cái file đó suốt mấy ngày trời- vì chưa hiểu tính chất của mảng động là mấy.
 
Upvote 0
Cho mình hỏi 1 chút xíu: Trong mảng động nhất thiết phải có Redim à?%#^#$
 
Upvote 0
Tạo mảng có các cách:
- Xác định trước kích thước mảng bằng các phép tính (theo điều kiện). Sau đó tạo mảng với kích thước vừa đủ. Mảng này không phải mảng động mà là mảng có kích thước theo điều kiện
- Tạo mảng (Dim) với kích thước cho trước, hoặc không có kích thước, sau đó tính lại kích thước mảng và Redim theo kích thước mới. Muốn giữ lại giá trị của mảng sau khi dùng ReDim thì dùng Redim Preserve. Nhưng Preserve chỉ cho phép thay đổi kích thước chiều cuối cùng. Nếu mảng 1 chiều (là mảng ngang theo mặc định), thì cho phép, nhưng mảng 2 chiều chỉ được tăng kích thước chiều thứ 2.
Lưu ý, khi tạo mảng dọc (1 cột), phải tạo mảng 2 chiều (n dòng, 1 cột), thì khi Redim có preserve chỉ có thể tăng kích thước chiều ngang (tăng cột), không tăng được kích thước chiều dọc (tăng dòng).
Bạn xem thêm bài này xem có giúp ích gì không.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom