Как использовать структуры в VBA? Определяемые пользователем типы данных
Допустим, вы пытаетесь создать систему управления школой. Здесь у вас будут разные типы переменных, такие как имя ученика, номер списка ученика, класс и т. Д. В школе также есть учителя, поэтому будут имена учителей, предмет учителя, классы и т. Д. Точно так же будет много других объектов, таких как , библиотекарь, классы, принцип и т. д. Теперь иметь разные переменные для каждой организации в школе будет грязной работой. Как насчет создания типа данных ученик, учитель, классы и т. Д., Который хранит связанные с ними значения. Для этого мы можем использовать определенные типы данных 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 |
Создание массива 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 |
В приведенном выше коде сначала определена структура 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
Вот как происходит результат, когда мы запускаем подлодку.
Эта функция действительно увеличивает возможности программирования 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]
| Это еще одна важная функция приборной панели. Это поможет вам суммировать значения для конкретных условий.