Access
 sql >> база данни >  >> RDS >> Access

Ms-Access VBA клас обектни масиви

Въведение.

Миналата седмица имахме кратко представяне на прост Custom Class Object само с две свойства, за дължина и Ширина Стойности. Метод за изчисляване на Площ на всичко, със стойности за дължина и ширина. Надяваме се, че сте разбрали основите на модула за персонализиран клас Ms-Access. Ако не, ето връзката:Ms-Access Class Module и VBA. Моля, посетете страницата, преди да продължите.

Class Module Objects спестява много код във вашите програми. Когато намерите нещо, което правите многократно в Code, помислете за обект на модул на клас. Повтарящият се код може да се превърне и в полезна функция, но за обектите на класа трябва да използвате различен подход.

За проста задача може да отнеме повече код, за да прецизирате функциите на Class Module Object, но вашите основни модулни програми ще бъдат прости и целият сложен код, разработен и усъвършенстван, ще остане скрит от другите.

Но засега имаме прост модул на класа в ръка и ще опитаме как да създадем масив от обекти, за да изчислим площта на много елементи.

Подрутина ClassArray().

Примерният VBA код в стандартния модул създава масив от пет обекта от клас ClsArea и отпечатва техните стойности на свойства и резултат от метода в прозореца за отстраняване на грешки. Копирайте и поставете (или по-добре, ако ги въведете, за да знаете по-добре всеки ред какво правят) следния код в стандартен модул:

Public Sub ClassArray()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String
Dim L As Long, U As Long

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea

tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
Set tmpA = Nothing 'Remove temporary object from memory.
Next


‘PRINTING SECTION
'Print the Array contents into the Debug Window
L = LBound(CA)
U = UBound(CA)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With CA(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

’stop

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub
 

Щракнете някъде в средата на кода и натиснете F5, за да изпълните кода. Въведете стойностите за описание, дължина и ширина от клавиатурата за 5 различни елемента, един след друг.

Примерно изпълнение на програмата е дадено по-долу:

Description   Length        Width         Area
Door Mat       5             8             40 
Carpet         12            23            276 
Bed Room       21            23            483 
Store Room     15            25            375 
Terrace        40            50            2000 

Преглед на код ред по ред.

Нека разгледаме кода ред по ред. В областта за декларация сме декларирали обектна променлива tmpA от тип ClsArea. Във втория ред е деклариран празен масив CA() от тип ClsArea. Необходимият брой елементи ще бъде преоразмерен по-късно в програмата.

В следващите два реда сме декларирали променливи title от тип String и j, L, и U променливи от тип Long Integer.

След това променливата заглавие се инициализира с низа „ClassArray“ и ще се използва като заглавие във функцията InputBox(). За….Напред цикълът се задава с контролна променлива j да стартирате цикъла пет пъти. След следващите два реда за коментари, Задаване изявлениеинстанцира (разпределя памет) Обект на клас ClsArea в паметта с името tmpA .

Следващите три реда код служат за въвеждане на стойности за strDesc , dblLength, и dblWidth Свойства на tmpA Class Object.

След следващия ред коментар, ClsArea Class Object (CA) се преоразмерява за 1 до j пъти (1 до 1 път) чрез запазване на съществуващите елементи на обекта, ако има такива (това е първият обект в масива). Това ще продължи да се увеличава чрез ReDim оператор до 1 до 2, 1 до 3, 1 до 4 и 1 до 5 чрез запазване на по-ранните стойности на обекта в рамките на For . . . Следващият цикъл. Резервът ключова дума гарантира, че съществуващите обекти на масива няма да бъдат загубени.

Забележка: Инструкцията Re-Dimension увеличава/намалява броя на посочените елементи на обекта, но изтрива съществуващите обекти, заредени в масива по-рано, без Запазване ключова дума.

Наборът оператор в следващия ред копира обекта tmpA с неговите данни в CA(j) Обект ClsArea новосъздаденият j елемент на масива.

Следващ ред Задайте tmpA =Нищо премахва временния обект от паметта.

Цикълът For…Next повтаря това действие още четири пъти, за да въведе други елементи в току-що инстанцирания временен обект tmpA, един след друг, и копира обекта в масива от CA обекти.

Следващите два реда, след реда за коментари, намират индексния диапазон на Object Array (открива най-ниското и най-високото число на индекса.

Следващият Отстраняване на грешки. Печат оператор отпечатва заглавен ред в 14 колонни зони в прозореца за отстраняване на грешки. Вза . . . Следващата цикъл с L и U bound array index number ranges изпълнява вътрешните оператори за достъп до всеки обект от масив CA, с номер на индекс в контролна променлива j.

Текущата препратка към обекта се задава в рамките на С. . . Край с структура, вместо да повтаря името на обекта CA(j).strDesc, CA(j).dblLength, CA(j).dblWidth и CA(j).Площ за да отпечатате стойностите на свойствата на обекта и резултатите от областта на метода() в прозореца за отстраняване на грешки.

Премахнете символа за коментар от „Стоп оператор за създаване на пауза в програмата на оператора Stop. Стартирайте отново кода и въведете подробности за 5 елемента, за да можете да експериментирате с обекта на масива. Можете избирателно да адресирате всяко свойство на обекта с номер на индекс на масива, за да редактирате или отпечатате всяка стойност в прозореца за отстраняване на грешки, както е показано по-долу.


Изявлението Задайте CA(j) =нищо в рамките на For. . . Следващият цикъл изчиства обектите на масива един по един от паметта.

Предаване на масив от обекти от клас като функционален параметър.

Можем да предадем масива от обекти от клас като параметър на програма, както направихме с потребителски дефиниран тип данни.

Нека създадем проста подпрограма за печат, като изрежем кода на секцията за печат на основната програма и го поставим в новата програма.

Копирайте кода на подпрограмата ClassArray(), поставете го в същия стандартен модул и променете името като ClassArray2(), както е показано по-долу.

Public Sub ClassArray2()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String
Dim L As Long, U As Long

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea

     tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
 Set tmpA = Nothing 'Remove temporary object from memory.
Next

‘PRINTING SECTION
'Print the Array contents into the Debug Window
L = LBound(CA)
U = UBound(CA)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With CA(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

’stop

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub
 

Кодът ClassArray2 без секция за печат.

Създайте нова подпрограма, както е показано по-долу:

Public Sub ClassPrint(ByRef clsPrint() As ClsArea)
Dim L As Long, U As Long
Dim j As Long

End Sub

Маркирайте секцията за печат до оператора „Стоп в програмата ClassArray2(), изрежете маркираната област на кода и я поставете под Dim изрази в ClassPrint() Програма. Променените версии на двата кода са дадени по-долу:

Public Sub ClassArray2()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea
     tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
 Set tmpA = Nothing 'Remove temporary object from memory.
Next

Call ClassPrint(CA) ‘Pass the Object Array to print routine

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub

Програмата ClassPrint().

Public Sub ClassPrint(ByRef clsPrint() As ClsArea)
Dim L As Long, U As Long
Dim j As Long

'Printing Section
'Print the Array Contents into the Debug Window.
L = LBound(clsPrint)
U = UBound(clsPrint)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With clsPrint(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

End Sub

Проверете за промени в кода и в двете програми и направете корекции, където е приложимо. Щракнете в средата на кода ClassArray2() и натиснете F5, за да стартирате програмата.

Инструкцията Call в първата програма предава масива на CA Class Object като параметър ByRef на подпрограмата ClassPrint(). Програмата отпечатва свойствата на обекта и извиква функцията Area(), за да изчисли и върне стойността за печат.

Следващата седмица ще научим как да използваме нашия модул ClsArea Class като базов клас, за да създадем нов VBA клас обект за изчисляване на Обем на нещо.

  1. Модул за MS-Access Class и VBA
  2. Обектни масиви от клас VBA на MS-Access
  3. Основен клас на MS-Access и производни обекти
  4. Базов клас на VBA и производни обекти-2
  5. Варианти на основен клас и производен обект
  6. Ms-Access Recordset and Class Module
  7. Достъп до модул за класове и класове за обвивка
  8. Преобразуване на функционалност на класа на обвивката
  9. Основи на Ms-Access и колекция обекти
  10. Модул за клас Ms-Access и обект на колекция
  11. Записи в таблицата в обект и форма на колекция
  12. Основи на обекта на речника
  13. Основи на обекта на речника-2
  14. Сортиране на ключове и елементи в речника
  15. Показване на записи от речник към формуляр
  16. Добавяне на обекти на клас като елементи от речника
  17. Актуализиране на елемент от речника за обект на клас във формуляра


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. База данни на SQL Server на Wide World Importers, съвместима с достъп

  2. 4 начина, по които базите данни за инвентаризация се възползват от търговията на дребно

  3. Ръководство от 7 стъпки за използване на Access с многофакторно удостоверяване на Azure

  4. Изграждане и поддържане на база данни за човешки ресурси

  5. Въпроси, които да зададете преди стартиране на база данни