Допустим, вы пытаетесь создать систему управления школой. Здесь у вас будут разные типы переменных, такие как имя ученика, номер списка ученика, класс и т. Д. В школе также есть учителя, поэтому будут имена учителей, предмет учителя, классы и т. Д. Точно так же будет много других объектов, таких как , библиотекарь, классы, принцип и т. д. Теперь иметь разные переменные для каждой организации в школе будет грязной работой. Как насчет создания типа данных ученик, учитель, классы и т. Д., Который хранит связанные с ними значения. Для этого мы можем использовать определенные типы данных VBA.

В этой статье мы узнаем, как вы можете создать свой собственный тип данных в VBA. Они называются UDT в VBA. === Определение типа данных, определяемого пользователем Для определения структуры или UDT в VBA мы используем блок 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, мы начнем с ключевого слова типа. Затем мы пишем имя нашего настраиваемого типа данных. По соглашению перед именем типа данных используется буква T, чтобы можно было различать link: / excel-macros-and-vba-how-to-use-vba-collections-in-excel [vba collections] и UDT. . Типы данных могут быть любыми. И целое число, строка, вариант, другой UDT, массивы, коллекции, что угодно.

Чтобы использовать ваш 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 до и под (позже я объясню почему). Мы только что создали массив, используя ключевое слово dim, как мы это делаем для любой переменной в VBA. Затем мы использовали 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, называемый велосипедом, который может иметь свои собственные свойства.

Теперь предположим, что вам нужен тип данных под названием автомобиль. Автомобиль может иметь в качестве элементов автомобиль и велосипед. Мы можем это сделать? Да, мы можем это сделать. См. Код ниже

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.

Автомобиль частного типа

number_of_Vehicle As Integer

велосипед Как Tbike

автомобиль As 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 = True

Вот как происходит результат, когда мы запускаем подлодку.

image

Эта функция действительно увеличивает возможности программирования VBA в геометрической прогрессии. Вы можете структурировать свой тип данных, как объекты реального мира. Вы можете создавать отношения между типами данных, которые могут быть полезны в большом проекте.

Так что да, ребята, вот как вы можете создавать и использовать пользовательский тип данных или структуру в VBA. Надеюсь, я смог это объяснить. Если у вас есть какие-либо вопросы по этой статье или любые другие вопросы, связанные с VBA, задавайте мне в разделе комментариев ниже. Я буду очень рад услышать от вас.

Статьи по теме:

link: / general-themes-in-vba-vba-variables-in-excel [переменные VBA в Excel] | * VBA означает Visual Basic для приложений.

Это язык программирования от Microsoft. Он используется с приложениями Microsoft Office, такими как MSExcel, MS-Word и MS-Access, тогда как переменные VBA являются конкретными ключевыми словами.

link: / general-themes-in-vba-excel-vba-variable-scope [Область переменных Excel VBA] | * Во всех языках программирования у нас есть спецификаторы доступа к переменным, которые определяют, откуда можно получить доступ к определенной переменной. Excel VBA — не исключение. VBA тоже имеет спецификаторы области видимости.

link: / cells-range-rows-and-columns-in-vba-what-is-the-difference-between-byref-and-byval-arguments-vba-интервью-question [ByRef and ByVal Arguments] | Когда аргумент передается как аргумент ByRef в другую подпрограмму или функцию, отправляется ссылка на фактическую переменную. Любые изменения, внесенные в копию переменной, будут отражены в исходном аргументе.

link: / files-workbook-and-worksheets-in-vba-delete-sheet-without-confirm-prompts-using-vba-in-microsoft-excel [Удалять листы без запросов подтверждения с помощью VBA в Microsoft Excel] | Поскольку вы удаляете листы с помощью VBA, вы знаете, что делаете.

Вы хотите, чтобы Excel не показывал это предупреждение и не удалял этот проклятый лист.

link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Добавить и сохранить новую книгу с помощью VBA в Microsoft Excel 2016] | В этом коде мы сначала создали ссылку на объект книги. А затем мы инициализировали его новым объектом книги. Преимущество этого подхода заключается в том, что вы можете легко выполнять операции с этой новой книгой. Например, сохранение, закрытие, удаление и т. Д. Display A Message On Строка состояния Excel VBA * | Строку состояния в Excel можно использовать как монитор кода. Когда ваш код VBA длинный и вы выполняете несколько задач с помощью VBA, вы часто отключаете обновление экрана, чтобы не видеть мерцания экрана.

link: / general-themes-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Отключить предупреждающие сообщения с помощью VBA в Microsoft Excel 2016] | * Этот код отключает не только VBA предупреждения, но также увеличивает временную эффективность кода. Посмотрим как.

Популярные статьи:

link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-вашу-продуктивность [50 комбинаций клавиш Excel для повышения вашей продуктивности] | Выполняйте свою задачу быстрее. Эти 50 ярлыков заставят вас работать в Excel еще быстрее.

link: / формулы-и-функции-введение-функции-vlookup [Функция ВПР в Excel] | Это одна из наиболее часто используемых и популярных функций Excel, которая используется для поиска значений из разных диапазонов и листов. link: / tips-countif-in-microsoft-excel [COUNTIF в Excel 2016] | Подсчитайте значения с условиями, используя эту удивительную функцию. Вам не нужно фильтровать данные для подсчета определенных значений.

Функция Countif важна для подготовки вашей приборной панели.

link: / excel-formula-and-function-excel-sumif-function [Как использовать функцию СУММЕСЛИ в Excel] | Это еще одна важная функция приборной панели. Это поможет вам суммировать значения для конкретных условий.