Ответы на вопросы по VBA. 1 Опишите модификатор Public. Для чего он, с какими элементами языка vba. Приведите 3 примера и в каждом укажите, что означает в примере использование Public
Скачать 245.69 Kb.
|
1) Опишите модификатор Public. Для чего он, с какими элементами языка VBA. Приведите 3 примера и в каждом укажите, что означает в примере использование Public. Ключевое слово Public в операторе объявления указывает, что доступ к элементу можно получить из кода в любом месте того же проекта, из других проектов, которые ссылаются на проект, и из любой сборки, построенной из проекта. В следующем коде показан пример объявления Public : Public Class ClassForEverybody Public можно использовать только на уровне модуля, интерфейса или пространства имен. Это означает, что можно объявить открытый элемент на уровне исходного файла или пространства имен либо внутри интерфейса, модуля, класса или структуры, но не в процедуре. Оператор Public используется для объявления типа данных переменной. Например, следующий оператор объявляет переменную типа Integer: Public NumberOfEmployees As Integer Кроме того, с помощью оператора Public можно объявлять тип объекта переменной. Следующий оператор объявляет переменную для нового экземпляра листа. Public X As New Worksheet В этом примере оператор Public используется на уровне модуля (раздел General) стандартного модуля для явного объявления общих переменных, которые доступны всем процедурам во всех модулях и приложениях, для которых не действует параметр Option Private Module. Public Number As Integer ' Общедоступная целочисленная переменная Public NameArray(1 To 5) As String ' Переменная открытого массива ' Несколько объявлений, два варианта и одно целое число, все общедоступное Public MyVar, YourVar, ThisVar As Integer 2) Опишите модификатор Private. Для чего он, с какими элементами языка VBA. Приведите 3 примера и в каждом укажите, что означает в примере использование Private. Оператор Private используется для объявления частных переменных на уровне модуля. Private MyName As String Частные переменные доступны только в том модуле, где они объявлены. Используйте оператор Private для объявления типа данных переменной. Например, следующий оператор объявляет переменную типа Integer. Private NumberOfEmployees As Integer Оператор Private можно использовать для объявления типа объекта переменной. Следующий оператор объявляет переменную для нового экземпляра листа. Private X As New Worksheet В этом примере показано использование оператора Private на уровне модуля для объявления переменных частными, то есть доступными только в модуле, в котором они объявлены. Private Number As Integer ' Частная целочисленная переменная Private NameArray(1 To 5) As String ' Переменная частного массива. ' Несколько объявлений, два варианта и одно целое число, все частные Private MyVar, YourVar, ThisVar As Integer 3) Опишите модификатор Static. Для чего он, с какими элементами языка VBA. Приведите 3 примера и в каждом укажите, что означает в примере использование Static. Если для объявления переменной в процедуре используется оператор Static вместо оператора Dim, объявленная переменная сохраняет свое значение между вызовами в этой процедуре. Используйте оператор Static с процедурой для объявления типа данных переменной, которая сохраняет свое значение между вызовами процедуры. Например, следующий оператор объявляет массив целых чисел, размер которого фиксирован: Static EmployeeNumber(200) As Integer Следующий оператор объявляет переменную для нового экземпляра листа. Static X As New Worksheet В этом примере оператор Static используется для сохранения значения переменной до тех пор, пока выполняется код модуля. ' Определение функции Function KeepTotal(Number) ' Только переменная Accumulate сохраняет свое значение между вызовами Static Accumulate Accumulate = Accumulate + Number KeepTotal = Accumulate End Function ' Определение статической функции Static Function MyFunction(Arg1, Arg2, Arg3) ' Все локальные переменные сохраняют значение между вызовами функций Accumulate = Arg1 + Arg2 + Arg3 Half = Accumulate / 2 MyFunction = Half End Function Простой пример статистической переменной Sub tt() Static t As Long MsgBox t t = t + 1 End Sub 4. Запишите в общем виде форму вызова процедуры, которая передает аргумент по значению. Приведите 3 примера и в каждом укажите, в каких частях программы будет доступно переданное значение. ByVal — Передача параметра по значению При передаче делается копия элемента. Все изменения, которые будут проводится над параметром, будут затрагивать только его. Sub/Function макрос/функция(ByVal значение As тип) Sub macro_test() Dim var_number As Integer var_number = 30 'Начальное значение переменной "var_number" есть 30 calcul_square var_number 'Под-процедура запускается с "var_number" как аргумент Private Sub calcul_square (ByVal var_value As Integer) 'Переменная "var_value" копирует значение переменной "var_number" (2-е переменные не являются связанными) var_value = var_value * var_value 'Значение переменной "var_value" изменено End Sub 'Конец под-процедуры (в этом примере под-процедура не имеет никакого влияния ни на что) MsgBox var_number 'Переменная "var_number" не была изменена, и поэтому 30 будет отображено в диалоговом окне Пример 2: Public Sub Test() Dim foo As Long foo = 42 DoSomething foo ‘Происходит передача foo без изменения в основом макросе Debug.Print foo End Sub Private Sub DoSomething(ByVal foo As Long) foo = foo * 2 MsgBox(foo) ‘foo будет равно 84, только внутри этого макроса End Sub Пример 3: Public Sub Chislo() Dim Poof As Integer Poof = 98 Poschitaem Poof ‘Происходит передача Poof без изменения в основом макросе Debug.Print Poof End Sub Private Sub Poschitaem(ByVal Poof As Integer) Poof = CStr(Poof) Poof = Poof + Poof MsgBox(Poof) ‘Poof будет равно 9898, только внутри этого макроса End Sub 5. Запишите в общем виде форму вызова процедуры (или функции), в которой аргумент передается по ссылке. Приведите 3 примера и в каждом укажите, в каких частях программы будет доступно переданное значение. Хотя бы в одном примере обязательно должно быть указано ключевое слово. ByRef — Передача параметра по ссылке В данном случае передача параметра происходит по ссылке. Любые изменения будут отражены на исходном элементе. Так же стоит знать, что ByRef используется по умолчанию при передаче параметров. Sub/Function макрос/функция(ByRef значение As тип) Sub macro_test() Dim var_number As Integer var_number = 30 'Начальное значение переменной "var_number" є 30 calcul_square var_number 'Под-процедура запускается с "var_number" как аргумент Private Sub calcul_square(ByRef var_value As Integer) 'Переменная "var_value" в некоторой степени служит для быстрого доступа к переменной "var_number", 'что означает, что если переменная "var_value" изменена, переменная "var_number" будет также изменена "(и они не должны обязательно иметь одинаковое имя) var_value = var_value * var_value 'Значение переменной "var_value" изменено (и поэтому "var_number" также одновременно изменено) End Sub 'Конец под-процедуры MsgBox var_number 'Переменная "var_number" была изменена, поэтому 900 будет сейчас отображено в диалоговом окне Пример 2: Public Sub Test() Dim foo As Long foo = 42 DoSomething foo ‘Происходит передача и изменение foo, foo станет равно 84 Debug.Print foo End Sub Private Sub DoSomething(ByRef foo As Long) foo = foo * 2 End Sub Пример 3: Public Sub Chislo() Dim Poof As Integer Poof = 98 Poschitaem Poof ‘Происходит передача и изменение Poof станет равно 9898 и изменит тип на Stirng Msgbox (Poof) End Sub Private Sub Poschitaem(ByRef Poof As Integer) Poof = CStr(Poof) Poof = Poof + Poof MsgBox(Poof) ‘Poof будет равно 9898 End Sub 6. Запишите в общем виде форму вызова процедуры (или функции), которая позволяет производить инициализацию динамического массива и изменение его размеров. Приведите 2 примера. Dim AnyName() As AnyType AnyName- допустимое название массива, AnyType- тип массива Объявив динамический массив, вы сможете менять его размер во время выполнения кода. Используйте операторы Static, Dim, Private или Public, чтобы объявить массив, не указывая значение в скобках, как показано в следующем примере: Dim sngArray() As Single Вы можете просто изменить размер массива с помощью ReDim , это изменит размер массива, но если вы сохраните информацию, уже сохраненную в массиве, вам понадобится часть Preserve . Dim Dynamic_array As Variant ' first we set Dynamic_array as variant For n = 1 To 100 If IsEmpty(Dynamic_array) Then 'isempty() will check if we need to add the first value to the array or subsequent ones ReDim Dynamic_array(0) 'ReDim Dynamic_array(0) will resize the array to one variable only Dynamic_array(0) = n Else ReDim Preserve Dynamic_array(0 To UBound(Dynamic_array) + 1) 'in the line above we resize the array from variable 0 to the UBound() = last variable, plus one effectivelly increeasing the size of the array by one Dynamic_array(UBound(Dynamic_array)) = n 'attribute a value to the last variable of Dynamic_array End If Next Мы можем использовать ту же логику для уменьшения массива. В этом примере значение «последний» будет удалено из массива. Dim Dynamic_array As Variant Dynamic_array = Array("first", "middle", "last") ReDim Preserve Dynamic_array(0 To UBound(Dynamic_array) - 1) ' Из массива будет отброшено “last” |