Cách khai báo đối tượng Type riêng kiểu mãng

Liên hệ QC

vba_gpe

Thành viên thường trực
Tham gia
15/12/10
Bài viết
296
Được thích
44
Nghề nghiệp
Thất nghiệp
Chào anh chị trong diễn đàn.
Em cần khai báo kiểu dữ liệu riêng, nhưng trong kiểu riêng này có mảng. Và các giá trị mảng thay đổi không cố định từ đầu.
Chẳng hạn em ví dụ mục đích của em như sau để mọi người dễ hiểu:
Giả sử em có 3 cấp biến như sau: Biến cấp 1 (Năm) , biến cấp 2 (tháng) , biến cấp 3 (ngày)
Trong năm thì có ith tháng, trong tháng có ing ngày, trong ngày có các thuộc tính nhỏ của ngày...

Với điều kiện là các i này (ith, ing, ...) không cố định từ đầu và thay đổi.

Trong đó:

+ Biến con cấp thấp nhất : ngày.
Em ví dụ như sau: Trong biến ngày có 1 số value nhỏ.
Mã:
Type demoNgay
    value1 as long
    value2 as long
    value3 as long
    ....
End Type
Biến cao hơn nữa là biến tháng. Trong biến tháng có biến ngày, nhưng mà có nhiều giá trị biến ngày chạy từ 1 đến ingay.
Mã:
Type demoThang
    ingay as demongay
    value1 as long
    value2 as long
    ...
End Type
Biến cấp cao hơn nữa là biến năm: Trong biến năm có nhiều biến tháng (trong 1 biến tháng có nhiều biến ngày), và biến tháng cũng chạy từ 1 đến ithang.

Mã:
Type demoNam
    inThang as demoThang
    value1 as long
    value2 as long
    ...
End Type

Em chưa biết phải code sao để cho đúng nữa, mong anh/chị đọc tư vấn giúp em.

Không biết mọi người có hiểu ý em mô tả không, nhưng đại loại như thế.
Em mong mọi người có thể giúp ạ.
Có cần thêm thông tin gì mọi người báo lại để em giải thích cho đúng ý của em ạ. :)
 
Lần chỉnh sửa cuối:
Chào anh chị trong diễn đàn.
Em cần khai báo kiểu dữ liệu riêng, nhưng trong kiểu riêng này có mảng. Và các giá trị mảng thay đổi không cố định từ đầu.
Chẳng hạn em ví dụ mục đích của em như sau để mọi người dễ hiểu:
Giả sử em có 3 cấp biến như sau: Biến cấp 1 (Năm) , biến cấp 2 (tháng) , biến cấp 3 (ngày)
Trong năm thì có ith tháng, trong tháng có ing ngày, trong ngày có các thuộc tính nhỏ của ngày...

Với điều kiện là các i này (ith, ing, ...) không cố định từ đầu và thay đổi.

Trong đó:

+ Biến con cấp thấp nhất : ngày.
Em ví dụ như sau: Trong biến ngày có 1 số value nhỏ.
Mã:
Type demoNgay
    value1 as long
    value2 as long
    value3 as long
    ....
End Type
Biến cao hơn nữa là biến tháng. Trong biến tháng có biến ngày, nhưng mà có nhiều giá trị biến ngày chạy từ 1 đến ingay.
Mã:
Type demoThang
    ingay as demongay
    value1 as long
    value2 as long
    ...
End Type
Biến cấp cao hơn nữa là biến năm: Trong biến năm có nhiều biến tháng (trong 1 biến tháng có nhiều biến ngày), và biến tháng cũng chạy từ 1 đến ithang.

Mã:
Type demoNam
    inThang as demoThang
    value1 as long
    value2 as long
    ...
End Type

Em chưa biết phải code sao để cho đúng nữa, mong anh/chị đọc tư vấn giúp em.

Không biết mọi người có hiểu ý em mô tả không, nhưng đại loại như thế.
Em mong mọi người có thể giúp ạ.
Có cần thêm thông tin gì mọi người báo lại để em giải thích cho đúng ý của em ạ. :)
Cao cấp quá! Hổng hiểu gì luôn!
 
Upvote 0
Cao cấp quá! Hổng hiểu gì luôn!
:D hihi.
Dạ. Thầy đừng để ý vào mấy cái code của em.
Ý em là trong Type DemoNam có biến iThang (là lớp riêng đã được định nghĩa bằng demoThang).
Trong lớp
DemoThang có biến iNgay (là lớp riêng đã được định nghĩa bằng demoNgay).
Thay vì em phải khai báo demothang1, demothang2, demothang2...... thì có cách nào chỉ khai báo 1 demothang(i=1 to n). Trong đó n: là số lần mình cho ạ.

Ví dụ thay vì em cứ lấy thủ công thế này đây ạ.
Mã:
Type demoday
      value1 as long
      value2 as long
End type
type demoThang
      iday1 as demoday
      iday2 as demoday
      ....
      iday..n as demoday
end type
Type DemoName
      iThang1 as Demothang
      iThang2 as Demothang
      ....
      ithang..m as Demothang
End type
Thay vì em phải khai báo iday thứ n thì có cách nào chỉ khai báo 1 iday thôi, mà cho chạy đc từ 1 tới n không ạ.
Tương tự thế: Thay vì em phải khai báo ithang thứ m thì có cách nào chỉ khai báo 1 ithang thôi, mà cho chạy đc từ 1 tới m không ạ.

Thầy hiểu được chút chút nào ý em chưa ạ. (hihi) :D

Mong thầy chỉ giáo ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
cách nào chỉ khai báo 1 demothang(i=1 to n). Trong đó n: là số lần
Không hiểu ý lắm. Bạn thử vầy xem phải không?
PHP:
Type demoThang
    mThang(1 To 12) As Long
End Type

Type demoTuan
    wTuan(1 To 5) As Long
End Type

Type demoNgay
    dNgay(1 To 31) As Long
End Type
'----------'
Sub Main()
    Dim d As demoNgay, w As demoTuan, m As demoThang
    d.dNgay(18) = 18
    w.wTuan(2) = 2
    m.mThang(3) = 8
    MsgBox d.dNgay(18) & vbCrLf & w.wTuan(2) & vbCrLf & m.mThang(3)
End Sub
 
Upvote 0
Không hiểu ý lắm. Bạn thử vầy xem phải không?
PHP:
Type demoThang
    mThang(1 To 12) As Long
End Type

Type demoTuan
    wTuan(1 To 5) As Long
End Type

Type demoNgay
    dNgay(1 To 31) As Long
End Type
'----------'
Sub Main()
    Dim d As demoNgay, w As demoTuan, m As demoThang
    d.dNgay(18) = 18
    w.wTuan(2) = 2
    m.mThang(3) = 8
    MsgBox d.dNgay(18) & vbCrLf & w.wTuan(2) & vbCrLf & m.mThang(3)
End Sub
Thanks bạn. :)
Gần đúng bạn ạ.
Cách này mình cũng đã biết.

Ý mình là thay vì 1 to 31, 1 to 5, 1 to 12, thì các số 31, 5, 12 không cố định ngay từ đầu.
Với lại biến nó không phải là long nữa mà nó bao gồm nhiều thuộc tính nhỏ bên trong. Kiểu như này:
Mã:
Type demoThang
    mThang(1 To 12) As demoTuan
   value1 as abc
   value2 as bcd
End Type

Type demoTuan
    wTuan(1 To 5) As demoNgay
   value1 as abc
   value2 as bcd
End Type

Type demoNgay
    dNgay(1 To 31) As Long
   value1 as abc
   value2 as bcd
End Type
 
Lần chỉnh sửa cuối:
Upvote 0
Thanks bạn. :)
Gần đúng bạn ạ.
Cách này mình cũng đã biết.

Ý mình là thay vì 1 to 31, 1 to 5, 1 to 12, thì các số 31, 5, 12 không cố định ngay từ đầu.
Với lại biến nó không phải là long nữa mà nó bao gồm nhiều thuộc tín nhỏ bên trong. Kiểu như này:
Mã:
Type demoThang
    mThang(1 To 12) As demoTuan
End Type

Type demoTuan
    wTuan(1 To 5) As demoNgay
End Type

Type demoNgay
    dNgay(1 To 31) As Long
End Type
Thế chịu rồi...
 
Upvote 0
thay vì 1 to 31, 1 to 5, 1 to 12, thì các số 31, 5, 12 không cố định ngay từ đầu.
Chỗ này không được, yêu cầu phải là mảng tĩnh.
PHP:
Type demoThang
    mThang(1 To n) As Long
End Type
'Error: Constant expression required'
Vậy chuyển thành:
PHP:
Type demoThang
    mThang As Long
End Type
'-------'
Sub Main()
    Dim m(1 To 100000) As demoThang
    m(1).mThang = 10
End Sub
Với lại biến nó không phải là long nữa mà nó bao gồm nhiều thuộc tính nhỏ bên trong.
Thế thì phải liệt kê ra hết, gộp vào làm sao được.

Chịu hết!
--------
Tham khảo:
https://msdn.microsoft.com/en-us/library/aa266315(v=vs.60).aspx
"Remarks:
The Type statement can be used only at module level. Once you have declared a user-defined type using the Type statement, you can declare a variable of that type anywhere within the scope of the declaration. Use Dim, Private, Public, ReDim, or Static to declare a variable of a user-defined type."
 
Lần chỉnh sửa cuối:
Upvote 0
Chỗ này không được, yêu cầu phải là mảng tĩnh.
PHP:
Type demoThang
    mThang(1 To n) As Long
End Type
'Error: Constant expression required'
Vậy chuyển thành:
PHP:
Type demoThang
    mThang As Long
End Type
'-------'
Sub Main()
    Dim m(1 To 100000) As demoThang
    m(1).mThang = 10
End Sub

Thế thì phải liệt kê ra hết, gộp vào làm sao được.

Chịu hết!
Cảm ơn bạn.
Việc khai báo 100000 có ảnh hưởng gì tốc độ không bạn nhỉ. Về cơ bản nếu khai báo con số này là vượt số dự kiến rồi. :)
 
Upvote 0
Cảm ơn bạn.
Việc khai báo 100000 có ảnh hưởng gì tốc độ không bạn nhỉ. Về cơ bản nếu khai báo con số này là vượt số dự kiến rồi. :)
Đọc lại khúc màu xanh ở bài trên sẽ rõ...
PHP:
Type demoThang
    mThang As Long
End Type
'-------'
Sub Main()
    Dim m() As demoThang, maxValue As Long
    maxValue = 100 ''
    ReDim m(1 To maxValue)
    m(1).mThang = 10
End Sub
 
Upvote 0
Web KT
Back
Top Bottom