Giả sử bạn đang cố gắng tạo ra một hệ thống quản lý trường học. Tại đây, bạn sẽ có nhiều loại biến khác nhau như tên học sinh, danh sách học sinh, lớp học, …​ Một trường học cũng có giáo viên nên sẽ có tên giáo viên, giáo viên môn học, các lớp học, …​ Tương tự, sẽ có nhiều đối tượng khác như , thủ thư, các lớp học, nguyên tắc, v.v. Bây giờ có các biến khác nhau cho mỗi thực thể trong trường sẽ là công việc lộn xộn. Làm thế nào về việc tạo một kiểu dữ liệu của sinh viên, giáo viên, các lớp học, v.v. để lưu trữ các giá trị liên quan đến chúng. Đối với điều này, chúng ta có thể sử dụng các kiểu dữ liệu được xác định của VBA.

Trong bài viết này, chúng ta sẽ tìm hiểu cách bạn có thể tạo kiểu dữ liệu của riêng mình trong VBA. Chúng được gọi là UDT của VBA. === Xác định kiểu dữ liệu do người dùng xác định Để xác định cấu trúc hoặc các UDT trong VBA, chúng tôi sử dụng khối Type___End Type.

Đây là cú pháp của UDT.

Type Tname_Of_Data_Type

var1 as datatype  'datatype can be anything, int, array,or even UDT

var2 as datatype

Var3() as datatype

---

VarN() as datatype

End Type

Để sử dụng UDT của bạn trong chương trình, hãy khai báo biến của nó giống như bất kỳ biến nào khác.

Sub UseUDT

'Declaring variable of user defined data type

Dim myVar1 as Tname_Of_Data_Type

Dim myVar2 as Tname_Of_Data_Type

End Sub

Đơn giản. Bây giờ để sử dụng các biến trong UDT này, chúng ta sử dụng toán tử dấu chấm.

Sử dụng tên của kiểu dữ liệu theo sau bởi một dấu chấm và tên của biến bên trong.

Sub UseUDT

'Declaring variable of user defined data type

Dim myVar1 as Tname_Of_Data_Type

Dim myVar2 as Tname_Of_Data_Type

myVar1.var1="Abcd"

myVar2.Var2="xyvz"

End Sub

Lý thuyết đã quá đủ, chúng ta hãy nhảy vào một ví dụ để xem nó hoạt động như thế nào.

Tạo Biến Sinh viên Lưu trữ Thông tin Liên quan đến Sinh viên Vì vậy, chúng ta có nhiệm vụ tạo một kiểu dữ liệu do người dùng xác định để lưu trữ thông tin liên quan đến sinh viên.

Một học sinh có họ, tên, số báo danh, ngày tháng năm sinh, lớp, ban, môn học.

Vì vậy, hãy tạo ra nó.

'Created a Public Student Data Type

Public Type Tstudent

fName As String    'For First Name

lName As String    'For Last Name

rNo As Integer    'For Roll Number

clss As string    'For Class

section As String   'For Section Name

subjects() As String 'For Subjects of student

End Type

'Use this Tstudent type in subroutine

Sub StudentsInfo()

'Creating and initializing student type variable

Dim student1 As Tstudent

student1.fName = "Manish"

student1.lName = "Singh"

student1.rNo = 12334

student1.clss = 10

student1.section = "A"

ReDim student1.subjects(2)

student1.subjects(0) = "physics"

student1.subjects(1) = "Math"

'Printing student details.

Debug.Print (student1.fName)

Debug.Print (student1.lName)

Debug.Print (student1.rNo)

Debug.Print (student1.clss)

Debug.Print (student1.section)

Debug.Print (student1.subjects(0))

Debug.Print (student1.subjects(1))

End Sub

Khi chạy sub bên trên nó sẽ in ra kết quả như hình bên dưới:

Manish

Singh

12334

10

A

physics

Math

image

Tạo một mảng UDT và các phần tử truy cập

Tương tự như vậy, bạn có thể tạo bao nhiêu biến kiểu Tstudent mà bạn cần.

Bạn thậm chí có thể tạo một mảng kiểu Tstudent giống như bất kỳ kiểu dữ liệu nào khác.

Public Type Tstudent

fName As String    'For First Name

lName As String    'For Last Name

rNo As Integer    'For Roll Number

clss As string    'For Class

section As String   'For Section Name

subjects() As String 'For Subjects of student

End Type

'Creating an arrays of Tstudents type

Sub SchoolInfo()

Dim schoolName As String

Dim students() As Tstudent

schoolName = "Senior School"

ReDim students(10)

For i = 0 To 9

students(i).fName = "name" & Str(i + 1)

students(i).rNo = i + 1

Next i

Debug.Print ("Name : Roll No")

For i = 0 To 9

Debug.Print (students(i).fName & " : " & students(i).rNo)

Next i

End Sub

Khi bạn chạy mã này, mã này sẽ được in trong cửa sổ ngay lập tức.

Name : Roll No

name 1 : 1

name 2 : 2

name 3 : 3

name 4 : 4

name 5 : 5

name 6 : 6

name 7 : 7

name 8 : 8

name 9 : 9

name 10 : 10

image

Trong đoạn mã trên, đầu tiên xác định cấu trúc UDT trước và cấu trúc phụ (tôi sẽ giải thích lý do sau). Chúng tôi vừa tạo một mảng bằng cách sử dụng từ khóa dim giống như chúng tôi làm cho bất kỳ biến nào trong VBA. Sau đó, chúng tôi sử dụng Redim để xác định kích thước của mảng. Sau đó, chúng ta sử dụng vòng lặp for để khởi tạo mảng.

Để truy cập các phần tử của cấu trúc, chúng ta sử dụng một vòng lặp for khác. Đó là nó.

Tại sao chúng tôi lại khai báo UDT ở đầu mô-đun?

Nếu chúng ta khai báo một UDT trước trong một mô-đun, bên ngoài bất kỳ chương trình con hoặc chức năng nào, thì nó có sẵn cho tất cả các mô-đun trong sổ làm việc. Nó có nghĩa là nếu bạn có một trăm con và hàm trong một mô-đun thì tất cả chúng đều có thể khai báo biến kiểu Sinh viên trong phần thân của chúng. Nếu UDT không phải là private, nó sẽ có sẵn cho tất cả các mô-đun trong sổ làm việc. Nếu muốn một cấu trúc (UDT) chỉ khả dụng cho một mô-đun chứa, hãy khai báo nó là private.

Private Type Tstudent

fName As String

lName As String

rNo As Integer

clss As Integer

section As String

subjects() As String

End Type

Bạn không thể có UDT ở cấp độ thủ tục. Nó có nghĩa là bạn không thể xác định kiểu dữ liệu do người dùng xác định bên trong một chương trình con hoặc hàm.

Kiểu do người dùng xác định lồng nhau Giả sử bạn có UDT được gọi là ô tô. Xe có những yếu tố riêng. Tương tự như vậy, bạn có một UDT được gọi là một chiếc xe đạp có thể có các thuộc tính riêng của nó.

Bây giờ, giả sử bạn cần một kiểu dữ liệu được gọi là phương tiện. Phương tiện có thể có ô tô và xe đạp như các yếu tố của nó. Chúng ta có thể làm điều này? Có, chúng tôi có thể làm điều này. Xem đoạn mã dưới đây

Private Type Tcar

seats As Integer

ac As Boolean

typ As String

color As String

manufacturer As String

Dop As Date

rc_no As String

End Type

Private Type Tbike

seats As Integer

typ As String

color As String

manufacturer As String

Dop As Date

rc_no As String

End Type

Private Type Tvehicle

number_of_Vehicle As Integer

bike As Tbike

car As Tcar

End Type

Sub vehicleVarification()

Dim myVehicles As Tvehicle

myVehicles.number_of_Vehicle = 2

myVehicles.bike.seats = 1

myVehicles.bike.typ = "Racing"

myVehicles.car.seats = "4"

myVehicles.car.ac = True

Debug.Print myVehicles.number_of_Vehicle

Debug.Print myVehicles.bike.typ

Debug.Print myVehicles.car.ac

End Sub

Ở đây, chúng tôi đã xác định ba kiểu dữ liệu do người dùng xác định. Đầu tiên là Tcar chứa một số thông tin liên quan đến ô tô. Thứ hai là xe đạp, nó cũng chứa một số thông tin về xe đạp.

UDT thứ ba là Tvehicle. Nó chứa một biến để lưu trữ số lượng xe và hai biến là loại Tcar và Tbike.

Loại riêng Tvehicle

number_of_Vehicle As Integer

xe đạp As Tbike

xe Như Tcar

Loại kết thúc

Để truy cập các biến của Tcar và Tbike, chúng ta có thể sử dụng kiểu dữ liệu Tvehicle. Trong phần phụ, chúng tôi chỉ định nghĩa một biến của kiểu Tvehicle là myVehicles. Khi chúng ta tạo biến này, VBA cũng tạo ra các biến Tcar và Tbike.

Để khởi tạo và truy cập các biến của Tcar và Tcar, chúng ta có thể sử dụng biến myVehicle. Như bạn có thể thấy trong mã.

myVehicles.number_of_Vehicle = 2

myVehicles.bike.seats = 1

myVehicles.bike.typ = “Đua xe”

myVehicles.car.seats = “4”

myVehicles.car.ac = True

Khi chúng tôi chạy sub, đây là cách kết quả xảy ra.

image

Tính năng này thực sự làm tăng sức mạnh của lập trình VBA theo cấp số nhân. Bạn có thể cấu trúc kiểu dữ liệu của mình giống như các thực thể trong thế giới thực. Bạn có thể tạo mối quan hệ giữa các kiểu dữ liệu có thể hữu ích trong một dự án lớn.

Vì vậy, các bạn, đây là cách bạn có thể tạo và sử dụng kiểu dữ liệu hoặc cấu trúc do người dùng xác định trong VBA. Tôi hy vọng tôi đã có thể giải thích nó. Nếu bạn có bất kỳ câu hỏi nào liên quan đến bài viết này hoặc bất kỳ câu hỏi nào khác liên quan đến VBA, hãy hỏi tôi trong phần bình luận bên dưới. Tôi thực sự rất vui khi được nghe từ bạn.

Bài viết liên quan:

Nó là một ngôn ngữ lập trình của Microsoft. Nó được sử dụng với các ứng dụng Microsoft Office như MSExcel, MS-Word và MS-Access trong khi các biến VBA là các từ khóa cụ thể.

Bạn muốn yêu cầu Excel không hiển thị cảnh báo này và xóa trang tính chết tiệt.

Bài viết phổ biến:

Chức năng Countif là cần thiết để chuẩn bị bảng điều khiển của bạn.