|假设您正在尝试创建学校管理系统。在这里,您将具有不同类型的变量,例如学生姓名,学生名册名,班级等。学校也有老师,因此会有老师姓名,老师科目,班级等。类似地,还会有许多其他对象,例如,图书馆员,班级,原则等。现在学校中每个实体的变量都有所不同,这将是一件麻烦的事情。如何创建存储与之相关的值的学生,老师,班级等数据类型。为此,我们可以使用VBA的已定义数据类型。

在本文中,我们将学习如何在VBA中创建自己的数据类型。它们被称为VBA的UDT​​。 ===定义用户定义的数据类型要在VBA中定义结构或UDT,我们使用Type___End Type块。

这是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

因此,要在VBA中定义自定义数据类型,我们从Type Keyword开始。然后,我们编写自定义数据类型的名称。习惯上在数据类型名称前使用T,以便您可以区分“ link:/ excel-macros-and-vba-how-to-to-use-vba-collections-in-excel [vba集合]”和UDT。 。数据类型可以是任何东西。还有Integer,String,Variant,另一个UDT,Arrays,collections等。

要在程序中使用您的UDT,请像其他变量一样声明其变量。

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

简单。现在要使用此UDT中的变量,我们使用点运算符。

使用数据类型的名称,后跟一个点和变量名。

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

足够多的理论,让我们跳入一个例子看看它是如何工作的。

创建一个存储与学生有关的信息的学生变量因此,我们有一个任务来创建一个存储与学生有关的信息的用户定义数据类型。

学生的名字,姓氏,卷号,出生日期,课程,科目和科目。

因此,让我们创建它。

'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

当您运行上述子程序时,它将打印结果,如下所示:

Manish

Singh

12334

10

A

physics

Math

image

创建UDT数组和访问元素

同样,您可以创建所需数量的Tstudent类型变量。

您甚至可以像其他任何数据类型一样创建Tstudent类型的数组。

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

当您运行此代码时,它将被打印在立即窗口中。

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

在上面的代码中,首先在UDT和sub之前定义了UDT结构(我将在后面解释原因)。就像我们为VBA中的任何变量所做的一样,我们刚刚使用了dim关键字创建了一个数组。然后,我们使用Redim定义数组的大小。之后,我们使用for循环来初始化数组。

要访问结构的元素,我们使用另一个for循环。这就对了。

为什么我们在模块顶部声明了UDT?

如果我们首先在任何子例程或函数之外的模块中声明UDT,则工作簿中的所有模块都可以使用它。这意味着,如果模块中有一百个子函数,则它们都可以在其主体中声明Student类型变量。如果UDT不是私有的,则它将对工作簿中的所有模块可用。如果希望结构(UDT)仅对包含模块可用,则将其声明为私有。

Private Type Tstudent

fName As String

lName As String

rNo As Integer

clss As Integer

section As String

subjects() As String

End Type

您不能在程序级别上使用UDT。这意味着您不能在子例程或函数中定义用户定义的数据类型。

嵌套的用户定义类型假设您有称为汽车的UDT。汽车有其自身的元素。同样,您有一个称为自行车的UDT,它可以具有自己的属性。

现在,我们需要一个称为vehicle的数据类型。车辆可以以汽车和自行车为元素。我们可以做到吗?是的,我们可以做到这一点。参见下面的代码

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

在这里,我们定义了三种用户定义的数据类型。首先是Tcar,其中包含一些与汽车有关的信息。第二个是自行车,它还包含一些有关自行车的信息。

第三个UDT是Tvehicle。它包含一个用于存储车辆数量的变量,以及两个Tcar和Tbike类型的变量。

私人交通工具

车辆数量为整数

自行车作为Tbike

汽车Tcar

结束类型

要访问Tcar和Tbike的变量,我们可以使用Tvehicle数据类型。在子部分中,我们仅将Tvehicle类型的一个变量定义为myVehicles。当我们创建此变量时,VBA也会创建Tcar和Tbike的变量。

要初始化和访问Tcar和Tcar变量,我们可以使用myVehicle变量。如您在代码中所见。

myVehicles.number_of_Vehicle = 2

myVehicles.bike.seats = 1

myVehicles.bike.typ =“赛车”

myVehicles.car.seats =“ 4”

myVehicles.car.ac =真

当我们运行子程序时,结果如何出现。

image

此功能确实以指数方式增加了对VBA进行编程的能力。您可以像现实世界实体一样构造数据类型。您可以在大型项目中有用的数据类型之间创建关系。

好的,这就是您可以在VBA中创建和使用用户定义的数据类型或结构的方式。我希望我能解释一下。如果您对本文有任何疑问或任何其他与VBA相关的问题,请在下面的评论部分中问我。收到您的来信,我将非常高兴。

相关文章:

`link:/ general-topics-in-vba-vba-variables-in-excel [Excel中的VBA变量] || * VBA代表Visual Basic for Applications。

它是Microsoft的一种编程语言。它与Microsoft Office应用程序(例如MSExcel,MS-Word和MS-Access)一起使用,而VBA变量是特定的关键字。

Excel VBA变量范围 | *在所有编程语言中,我们都有变量访问说明符,用于定义可从何处访问已定义变量。 Excel VBA也不例外。 VBA也具有范围说明符。

ByRef和ByVal参数当参数作为ByRef参数传递给其他子函数时,将发送实际变量的引用。对变量副本所做的任何更改都将反映在原始参数中。

在Microsoft Excel中使用VBA删除没有确认提示的工作表由于要使用VBA删除工作表,因此您知道自己在做什么。

您想告诉Excel不要显示此警告并删除该死的表。

在Microsoft Excel 2016中使用VBA添加和保存新工作簿] |在此代码中,我们首先创建了对工作簿对象的引用。然后,我们使用一个新的工作簿对象对其进行了初始化。这种方法的好处是您可以轻松地对此新工作簿进行操作。像保存,关闭,删除等一样,链接:/ menus-toolbars-status-bar-in-vba-在Microsoft Excel中使用vba-显示状态栏上的消息Excel VBA状态栏*]| excel中的状态栏可用作代码监视器。当您的VBA代码很长并且您使用VBA执行多项任务时,通常会禁用屏幕更新,以免看到屏幕闪烁。

`link:/ general-topics-in-vba-off-warning-messages-using-vba-in-microsoft-excel [在Microsoft Excel 2016中使用VBA关闭警告消息] | **此代码不仅禁用VBA警报,但也增加了代码的时间效率。让我们看看如何。

热门文章:

50 Excel快捷方式以提高生产率更快地完成任务。这50个快捷键将使您在Excel上的工作速度更快。

Excel中的VLOOKUP函数在Excel 2016中为COUNTIF使用此惊人的功能对条件进行计数。您无需过滤数据即可计算特定值。

Countif功能对于准备仪表板至关重要。

如何在Excel中使用SUMIF函数这是仪表板的另一个重要功能。这可以帮助您汇总特定条件下的值。