Массивы в Visual Basic
Оценка 4.8

Массивы в Visual Basic

Оценка 4.8
Научно-исследовательская работа +4
docx
информатика
Взрослым
17.02.2017
Массивы в Visual Basic
Массив представляет собой набор значений, логически связанных друг с другом, например, число учеников в каждом классе в школе. С помощью массива можно ссылаться на эти связанные значения по одному имени и используя номер, называемый индексом или подиндексом, чтобы отличить элементы друг от друга. Отдельные значения, называются элементами массива. Они представляются непрерывной последовательностью от индекса 0 до наибольшего значения индекса. В отличие от массива, переменная, содержащая одиночное значение, называется скалярной переменной.
Массивы в Visual Basic.docx
Массивы в Visual Basic Массив представляет собой набор значений, логически связанных друг с другом, например, число учеников в каждом классе в школе. С помощью массива можно ссылаться на эти связанные значения по одному имени и  используя номер, называемый индексом или подиндексом, чтобы отличить элементы друг  от друга. Отдельные значения, называются элементами массива. Они представляются  непрерывной последовательностью от индекса 0 до наибольшего значения индекса. В отличие от массива, переменная, содержащая одиночное значение,  называется скалярной переменной. Содержание раздела  Элементы массива в простом массиве  Создание массива  Объявление массива  Сохранение значений в массиве  Заполнение массива начальными значениями o Вложенные литералы массива  Перебор массива  Массивы как возвращаемые значения и параметры  Массивы массивов  Массивы нулевой длины  Размер массива  Типы массива и другие типы  Коллекции как альтернатива массивам Элементы массива в простом массиве В следующем примере объявляется переменная массива для хранения числа учеников в  каждом классе школы. VB Dim students(6) As Integer Массив students в предыдущем примере содержит семь элементов. Индексы элементов  лежат в диапазоне от 0 до 6. Использовать массив проще, чем объявить семь отдельных  переменных. На следующем рисунке показан массив students. Для каждого элемента массива:  Индекс элемента представляет школьный класс (индекс 0 представляет детский сад).  Значение, содержащееся в элементе, представляет число учеников в этом классе. Элементы массива "учеников"  В следующем примере показано обращение к первому, второму и последнему элементу  массива students. VB Dim kindergarten As Integer = students(0) Dim firstGrade As Integer = students(1) Dim sixthGrade As Integer = students(6) MsgBox("Students in kindergarten = " & CStr(kindergarten)) MsgBox("Students in first grade = " & CStr(firstGrade)) MsgBox("Students in sixth grade = " & CStr(sixthGrade)) Можно ссылаться на массив в целом, используя только имя переменной массива без  индексов. Массив students в предыдущем примере использует один индекс и считается  одномерным. Массив, использующий более одного индекса, называется многомерным  массивом. Дополнительные сведения далее в этом разделе в разделе Размерность массивов  в Visual Basic. Создание массива Размер массива можно задать несколькими способами. Можно указать размер при  объявлении массива, как показано в следующем примере. VB Dim cargoWeights(10) As Double Dim atmospherePressures(2, 2, 4, 10) As Short Dim inquiriesByYearMonthDay(20)()() As Byte Также можно указать размер массива при создании с помощью предложения New, как  показано в следующем примере. VB cargoWeights = New Double(10) {} atmospherePressures = New Short(2, 2, 4, 10) {} inquiriesByYearMonthDay = New Byte(20)()() {} Если уже существует массив, можно переопределить его размер с помощью  оператора Redim. Можно указать оператору Redim сохранить значения, уже имеющиеся в  массиве, или указать создать новый пустой массив. В следующем примере показаны  различные варианты использования оператора Redim для изменения размера  существующего массива. VB ' Assign a new array size and retain the current element values. ReDim Preserve cargoWeights(20) ' Assign a new array size and retain only the first five element values. ReDim Preserve cargoWeights(4) ' Assign a new array size and discard all current element values. ReDim cargoWeights(15) Для получения дополнительной информации см. Оператор ReDim (Visual Basic). Объявление массива Переменная массива объявляется так же, как любая другая переменная, с помощью  инструкции Dim. За именем переменой следуют одна или более пар скобок, показывающие, что это массив, а не скаляр (переменная, содержащая одно значение). После объявления массива можно определить его размер с помощью Оператор ReDim  (Visual Basic). В следующем примере объявляется переменная одномерного массива путем добавления  пары скобок после типа. В примере также определяется измерения массива с  помощью Оператор ReDim (Visual Basic). VB ' Declare a one­dimensional array. Dim cargoWeights As Double() ' Dimension the array. ReDim cargoWeights(15) В следующем примере объявляется переменная многомерного массива путем добавления  одной пары скобок после типа и запятых внутри скобок для разделения измерений  массива. В примере также определяется измерения массива с помощью Оператор ReDim  (Visual Basic). VB ' Declare a multidimensional array. Dim atmospherePressures As Short(,,,) ' Dimension the array. ReDim atmospherePressures(1, 2, 3, 4) Для объявления переменной массива массивов добавьте пару скобок после имени  переменной для каждого уровня вложенных массивов. VB Dim inquiriesByYearMonthDay()()() As Byte В предыдущих примерах объявляются переменные массива, но массивы им не  присваиваются. По­прежнему необходимо создать массив, инициализировать его и  присвоить его переменной. Сохранение значений в массиве К любому местоположению в массиве можно получить доступ, используя индекс  типа Integer. Можно сохранять и извлекать значения массива, ссылаясь на местоположение в массиве с помощью индекса места, приведенного в скобках. Индексы для многомерных  массивов разделяются запятыми (,). Для каждого измерения массива требуется один  индекс. В следующем примере показаны некоторые операторы, которые сохраняют  значения в массивах. VB Dim i = 4 Dim j = 2 Dim numbers(10) As Integer Dim matrix(5, 5) As Double numbers(i + 1) = 0 matrix(3, j * 2) = j В следующем примере показаны некоторые операторы, которые получают значения из  массивов. VB Dim v = 2 Dim i = 1 Dim j = 1 Dim k = 1 Dim wTotal As Double = 0.0 Dim sortedValues(5), rawValues(5), estimates(2, 2, 2) As Double Dim lowestValue = sortedValues(0) wTotal += (rawValues(v) ^ 2) Dim firstGuess = estimates(i, j, k) Заполнение массива начальными значениями Можно создать массив, содержащий начальный набор значений, с помощью литерала  массива. Литерал массива состоит из списка разделенных запятыми значений, заключенных  в фигурные скобки ({}). При создании массива с помощью литерала массива можно либо указать тип массива, либо  использовать вывод типа для определения типа массива. В следующем коде показаны обе  возможности. VB Dim numbers = New Integer() {1, 2, 4, 8} Dim doubles = {1.5, 2, 9.9, 18} При использовании вывода типа тип массива определяется главным типом списка  значений, предоставленного для литерала массива. Главный тип — это уникальный тип, до  которого могут быть расширены все другие типы литерала массива. Если такой  уникальный тип нельзя определить, то главным типом будет тип, до которого можно сузить все другие типы массива. Если ни один из указанных уникальных типов нельзя определить,  главным типом будет Object.Например, если список значений для литерала массива  содержит значения типов Integer, Long и Double, результирующий массив будет иметь  тип Double.Типы Integer и Long расширяются только до  типа Double. Поэтому Double является главным типом. Для получения дополнительной  информации см.Расширяющие и сужающие преобразования (Visual Basic). Данные правила  вывода применимы для вывода типов массивов, которые являются локальными  переменными, определенными в элементе класса. Несмотря на то что можно использовать  литералы массива при создании переменных уровня класса, нельзя использовать вывод  типа на уровне класса. В результате литералы массива, заданные на уровне класса,  определяют значения, указанные для литерала массива, как тип Object. Можно явно задать тип элементов в массиве, созданном с помощью литерала массива. В  таком случае значения литерала массива должны расширяться до типа элементов  массива. В следующем примере кода создается массив типа Double из списка целых чисел. VB Dim values As Double() = {1, 2, 3, 4, 5, 6} Вложенные литералы массива Можно создать многомерный массив с помощью вложенных литералов массива. Вложенные литералы массива должны иметь измерение и число измерений, называемое ранг,  соответствующее результирующему массиву. В следующем примере кода создается  двухмерный массив целых чисел с помощью литерала массива. VB Dim grid = {{1, 2}, {3, 4}} В предыдущем примере возникла бы ошибка, если бы число элементов во вложенных  литералах массива не совпадало. Ошибка также возникла бы, если бы переменная массива  была объявлена явно не двухмерной.  Примечание Избежать ошибки при указании вложенных литералов массива с различными измерениями можно, заключив  внутренние литералы массива в круглые скобки. Скобки требуют принудительного вычисления значения выражения  литерала массива, полученные значения используются со внешним литералом массива, как показано в следующем  коде. VB Dim values = {({1, 2}), ({3, 4, 5})} При создании многомерного массива с помощью вложенных литералов массива можно  использовать вывод типа. При использовании вывода типа выводимый тип является  главным типом для всех значений всех литералов массива какого­либо уровня  вложенности. В следующем примере кода создается двухмерный массив типа Double из  значений типа Integer и Double. VB Dim a = {{1, 2.0}, {3, 4}, {5, 6}, {7, 8}} Дополнительные примеры см. в разделе Практическое руководство. Инициализация  переменной массива в Visual Basic. Перебор массива При репликации по массиву, вы получаете доступ к каждому элементу массива от  наименьшего индекса к наибольшему индексу. Следующий пример выполняет перебор одномерного массива с помощью  оператора Оператор For... Next (Visual Basic). Для каждого измерения массива  метод GetUpperBound возвращает максимально допустимое значение индекса. Наименьшее значение индекса всегда равно 0. VB Dim numbers = {10, 20, 30} For index = 0 To numbers.GetUpperBound(0)     Debug.WriteLine(numbers(index)) Next ' Output: '  10 '  20 '  30 Следующий пример выполняет перебор многомерного массива с помощью  оператора For...Next. Метод GetUpperBound имеет параметр, который определяет  измерение. GetUpperBound(0) возвращает высокое значение индекса для первого  измерения, а GetUpperBound(1) возвращает высокое значение индекса для второго  измерения. VB Dim numbers = {{1, 2}, {3, 4}, {5, 6}} For index0 = 0 To numbers.GetUpperBound(0)     For index1 = 0 To numbers.GetUpperBound(1)         Debug.Write(numbers(index0, index1).ToString & " ")     Next     Debug.WriteLine("") Next ' Output  '  1 2  '  3 4  '  5 6 Следующий пример выполняет перебор одномерного массива с помощью  оператора Оператор For Each...   Next (Visual Basic).   VB Dim numbers = {10, 20, 30} For Each number In numbers     Debug.WriteLine(number) Next ' Output: '  10 '  20 '  30 Следующий пример выполняет перебор многомерного массива с помощью оператора For  Each...Next. Однако возможности управления элементами многомерного массива будут  шире при использовании вложенного оператора For…Next, как показано в предыдущем  примере, вместо оператора For Each…Next. VB Dim numbers = {{1, 2}, {3, 4}, {5, 6}} For Each number In numbers     Debug.WriteLine(number) Next ' Output: '  1 '  2 '  3 '  4 '  5 '  6 Массивы как возвращаемые значения и параметры Чтобы вернуть массив из процедуры Function, укажите тип данных массива и число  измерений в качестве возвращаемого типа Оператор Function (Visual Basic). Внутри  функции объявите локальную переменную массива с тем же числом измерений и типом  данных. В Оператор Return (Visual Basic) включите локальную переменную массива без  скобок. Чтобы определить массив в качестве параметра в процедуре Sub или Function, задайте  параметр как массив с указанными типом данных и количеством измерений. В вызове  процедуры отправьте переменную массива с тем же типом данных и количеством  измерений. В следующем примере функция GetNumbers возвращает Integer(). Этот тип массива —  одномерный массив типа Integer. Процедура ShowNumbersпринимает аргумент Integer(). VB Public Sub Process()     Dim numbers As Integer() = GetNumbers()     ShowNumbers(numbers) End Sub Private Function GetNumbers() As Integer()     Dim numbers As Integer() = {10, 20, 30}     Return numbers End Function Private Sub ShowNumbers(numbers As Integer())     For index = 0 To numbers.GetUpperBound(0)         Debug.WriteLine(numbers(index) & " ")     Next End Sub ' Output: '   10 '   20 '   30 В следующем примере функция GetNumbersMultiDim возвращает Integer(,). Этот тип  массива — одномерный массив типа Integer. ПроцедураShowNumbersMultiDim принимает  аргумент Integer(,). VB Public Sub ProcessMultidim()     Dim numbers As Integer(,) = GetNumbersMultidim()     ShowNumbersMultidim(numbers) End Sub Private Function GetNumbersMultidim() As Integer(,)     Dim numbers As Integer(,) = {{1, 2}, {3, 4}, {5, 6}}     Return numbers End Function Private Sub ShowNumbersMultidim(numbers As Integer(,))     For index0 = 0 To numbers.GetUpperBound(0) For index1 = 0 To numbers.GetUpperBound(1)             Debug.Write(numbers(index0, index1).ToString & " ")         Next         Debug.WriteLine("")     Next End Sub ' Output   '  1 2   '  3 4   '  5 6 Массивы массивов Массив, который содержит другие массивы как элементы, называется массивом  массивов. Массив массивов и каждый элемент в массиве массивов могут иметь одно или  несколько измерений. Иногда структура данных в приложении является двухмерной, но не  прямоугольной. В следующем примере имеется массив месяцев, каждый элемент которого представляет  собой массив дней. Поскольку число дней в разных месяцах различно, элементы не  образуют прямоугольный двухмерный массив. Следовательно, массив массивов  используется вместо многомерного массива. VB ' Declare the jagged array. ' The New clause sets the array variable to a 12­element ' array. Each element is an array of Double elements. Dim sales()() As Double = New Double(11)() {} ' Set each element of the sales array to a Double ' array of the appropriate size. For month As Integer = 0 To 11     Dim days As Integer =         DateTime.DaysInMonth(Year(Now), month + 1)     sales(month) = New Double(days ­ 1) {} Next month ' Store values in each element. For month As Integer = 0 To 11     Dim upper = sales(month).GetUpperBound(0)     For day = 0 To upper         sales(month)(day) = (month * 100) + day     Next Next Массивы нулевой длины Массив без элементов также называется массивом нулевой длины. Переменная,  содержащая массив нулевой длины, не имеет значения Nothing. Чтобы создать массив без  элементов, объявите одно из измерений массива равным ­1, как показано в следующем  примере. VB Dim twoDimensionalStrings(­1, 3) As String Возможно, потребуется создать массив нулевой длины в следующих случаях.  Без риска возникновения исключения NullReferenceException код должен обращаться к членам класса Array, таким как Length или Rank, или вызывать функцию Visual  Basic, такую как UBound.  Требуется сделать соответствующий код проще, избежав необходимости проверки на значение Nothing как особый случай.  Код взаимодействует с интерфейсом API, который требует передачи массива  нулевой длины в одну или несколько процедур или возвращает массив нулевой длины из одной или нескольких процедур. Размер массива Размер массива является произведением длин всех его измерений. Он представляет собой  общее число элементов, в данный момент содержащихся в массиве. В следующем примере показано объявление трехмерного массива: Dim prices(3, 4, 5) As Long Общий размер массива в переменной prices составляет (3 + 1) x (4 + 1) x (5 + 1) = 120. Размер массива можно определить с помощью свойства Length. Длину каждого измерения  многомерного массива можно получить с помощью методаGetLength. Можно изменять размер переменной массива, присваивая ей новый объект массива, или с  помощью оператора ReDim. Существует ряд особенностей, о которых следует помнить при работе с размером массива. Длина  измерения Индекс каждого измерения начинается с 0, что означает, что его  диапазон от 0 до верхней границы. Таким образом, длина данного  измерения на 1 больше объявленной верхней границы этого измерения. Ограничения  Длина каждого измерения массива ограничена максимальным длины значением типа Integer, которое равно (2 ^ 31) ­ 1. Тем не менее, общий размер массива также ограничен доступной памятью в системе. При  попытке инициализировать массив, размер которого превышает объем  доступной оперативной памяти, общеязыковая среда выполнения  создает исключение OutOfMemoryException. Размер и размер  элемента Размер массива не зависит от типа его элементов. Размер всегда  представляет общее число элементов, а не число байтов, занимаемое  массивом при хранении. Затраты памяти Небезопасно делать любые предположения относительно способа  хранения массива в памяти. Хранение зависит от размерности данных  платформы, так один и тот же массив может потреблять больше  памяти на 64­разрядных системах, чем на 32­разрядных. В зависимости  от конфигурации системы при инициализации массива общеязыковая  среда выполнения (CLR) может указывать такие способы хранения, как упаковка элементов максимально близко друг к другу или  выравнивание всех элементов по естественным аппаратным границам  памяти.Кроме того массив нуждается в хранении служебной  информации, и размер этой информации возрастает при каждом  добавлении измерения. Типы массива и другие типы Каждый массив имеет тип данных, но этот тип отличается от типа данных его  элементов. Не существует единого типа данных, подходящего для всех массивов.Вместо  этого тип данных массива определяется числом измерений массива, или рангом, и типом  данных элементов массива. Две переменные массивов имеют один тип, только если  массивы одного ранга и содержат данные одного и того же типа. Длины измерений массива  не влияют на тип данных массива. Каждый массив наследуется от класса System.Array, и можно объявить переменную  типа Array, но не нельзя создать массив типа Array. Кроме того, Оператор ReDim (Visual  Basic) не может работать с переменной, объявленной как тип Array. По этой причине и для строгой типизации рекомендуется объявить каждый массив как конкретный тип,  например Integer, как в предыдущем примере. Можно выяснить тип данных массива или его элементов несколькими способами.  Можно вызвать метод Object.GetType для переменной для получения  объекта Type типа переменной времени выполнения. Объект Type содержит  подробные сведения в своих свойствах и методах.  Можно передать переменную функции TypeName, чтобы получить объект String,  содержащий имя типа времени выполнения.  Можно передать переменную функции VarType для получения  значения VariantType, представляющего классификацию типа переменной. В следующем примере вызывается функция TypeName для определения типа массива и  типа элементов в массиве. Массив имеет тип Integer(,), а элементы массива относятся к  типу Integer. VB Dim thisTwoDimArray(,) As Integer = New Integer(9, 9) {} MsgBox("Type of thisTwoDimArray is " & TypeName(thisTwoDimArray)) MsgBox("Type of thisTwoDimArray(0, 0) is " & TypeName(thisTwoDimArray(0, 0))) Коллекции как альтернатива массивам Массивы удобнее всего использовать для создания и работы с фиксированным числом  строго типизированных объектов. Коллекции предоставляют более гибкий способ работы с группами объектов. В отличие от массивов, коллекция, с которой вы работаете, может  расти или уменьшаться динамически при необходимости. Если требуется изменить размер массива, необходимо использовать Оператор ReDim  (Visual Basic). После этого Visual Basic создает новый массив и освобождает предыдущий  массив. Это занимает время выполнения. Таким образом, если число элементов при работе  изменяется часто или нельзя предсказать максимальное число необходимых элементов,  можно получить большую производительность при использовании коллекции. Некоторые коллекции допускают назначение ключа любому объекту, который добавляется  в коллекцию, чтобы в дальнейшем можно было быстро извлечь связанный с ключом объект  из коллекции. Если коллекция содержит элементы только одного типа данных, можно использовать один  из классов в пространстве имен System.Collections.Generic.Универсальная коллекция  обеспечивает безопасность типов, так что другие типы данных не могут быть в нее  добавлены. При извлечении элемента из универсальной коллекции нет необходимости  определять или преобразовывать его тип данных. Дополнительные сведения о коллекциях см. в разделе Коллекции (C# и Visual Basic). Пример В следующем примере используется универсальный класс .NET  Framework System.Collections.Generic.List для создания коллекции­списка  объектовCustomer. VB ' Define the class for a customer. Public Class Customer     Public Property Name As String     ' Insert code for other members of customer structure. End Class ' Create a module­level collection that can hold 200 elements. Public CustomerList As New List(Of Customer)(200) ' Add a specified customer to the collection. Private Sub AddNewCustomer(ByVal newCust As Customer)     ' Insert code to perform validity check on newCust. CustomerList.Add(newCust) End Sub ' Display the list of customers in the Debug window. Private Sub PrintCustomers()     For Each cust As Customer In CustomerList         Debug.WriteLine(cust)     Next cust End Sub Объявление коллекции CustomerFile задает, что она может содержать только элементы  типа Customer. Она также имеет исходную емкость 200  элементов.Процедура AddNewCustomer проверяет новый элемент на допустимость и затем добавляет его к коллекции. Процедура PrintCustomers использует цикл For Each для  прохода по коллекции и отображения ее элементов. Массивы VBA (ч.1). Понятие и размерность массива. Статические и динамические  массивы. Массив ­ это коллекция переменных, которые  имеют общие имя и базовый тип. Все  элементы данных, сохраняемых в массиве,  должны иметь один и тот же тип.  Информация, сохраненная в массиве, может  быть доступна в любом порядке. Массив позволяет сохранять и  манипулировать многими элементами  данных посредством единственной  переменной. Обработку массивов значительно упрощает использование циклов. Одномерные массивы Одномерный массив ­ это самый простой  вариант массива, использующий  обыкновенный список данных. Например:  Вася, Петя, Коля, Миша, Ваня, Слава, Игорь,  Юра, Саша, Вова  Это строковый массив, состоящий из 10  элементов. Дадим ему название My_Array. Нумерация элементов в массиве начинается с  0. Такая система нумерации довольно  распространена в программировании и  называется нумерацией с нулевой базой. Для доступа к данным, хранящимся в определенном элементе массива, следует  указывать имя массива с последующим числом, называемым индексом элемента.  Индекс всегда заключается в круглые скобки. Например: My_Array(3) ­ этому  элементу нашего массива соответствует "Миша" (не забывайте, что по умолчанию  нумерация элементов массива начинается с 0). Поскольку нумерация с нулевой базой не очень удобна (т.к. мы привыкли считать с 1, а не с 0), то в VBA имеется директива компилятора, позволяющая исправить это  "неудобство": Option Base. Директива компилятора имеет два варианта написания:  Option Base 0 ­ индексы массивов начинаются с 0 (установка по умолчанию) Option Base 1 ­ индексы массивов начинаются с 1  Данная директива компилятора помещается в область объявлений модуля перед  объявлениями любых переменных, констант или процедур. Нельзя помещать Option Base внутри процедуры. Можно иметь только один оператор Option Base в модуле,  который влияет на все массивы, объявляемые в модуле. Многомерные массивы Одномерные массивы хорошо подходят для представления простых списков данных.  Однако часто бывает необходимо представить таблицы данных в программах с  организацией данных в формате строк и столбцов, подобно ячейкам в рабочих листах Excel. Для этого необходимо использовать многомерные массивы. Так адрес каждой  ячейки листа состоит из двух чисел, одно из которых (номер строки) является первым индексом, а второе (номер столбца) ­ вторым индексом массива. Такой массив  называется двумерным массивом. Добавив еще номер листа, получим трехмерный  массив. VBA позволяет создавать массивы, имеющие до 60 измерений. Статические и динамические массивы Массивы, не меняющие число своих элементов, называются статическими  массивами. Примером такого массива может служить вышеприведенный  массив My_Array, содержащий 10 элементов. Однако бывают ситуации, когда изначально неизвестно количество элементов в  массиве, или же, в процессе работы это количество может изменяться. Такие массивы называются динамическими массивами. Динамический массив может увеличиваться или сжиматься, чтобы вмещать точно  необходимое число элементов без напрасного расходования памяти. Массивы VBA (ч.2). Объявление и использование массивов Объявление массивов Объявление массива с использованием  оператора Dim имеет следующий синтаксис: Dim VarName([Subscripts]) [As Type]  VarName ­ любое имя массива, использующее  допустимый идентификатор имени; Subscripts ­ измерение массива. Если  размерность массива больше единицы, то  Subscripts разделяются запятыми.  Оператор Subscripts имеет следующий  синтаксис: [lower To] upper [,[lower To] upper]..  lower ­ определяет нижний диапазон допустимых индексов для массива (необязательный  аргумент); upper ­ определяет верхний предел для индексов  массива (обязательный аргумент). Примеры правильного объявления массивов: Dim Array_Str (1 To 10) As String ­ одномерный статический строковый массив,  включающий 10 элементов; Dim Array_Var() ­ динамический массив; Dim Array_Mult (0 To 5, 0 To 7) As Integer ­ двумерный статический массив целых чисел,  включающий 6*8=48 элементов. При объявлении массивов следует помнить, что включение оператора Subscripts в  объявлении массива создает статический массив с фиксированным числом элементов, пропуск оператора Subscripts в объявлении массива создает динамический массив, а  установка директивы компилятора Option Base влияет на общее число элементов в  массиве. Использование массивов Для доступа к элементу массива необходимо указывать имя массива, за которым следует  значение индекса, заключенное в круглые скобки. Нижеприведенный листинг показывает элементарное объявление и использование массива  (в качестве элементов массива используется факториал номера элемента массива): При помощи вложенных циклов довольно легко можно организовать инициализацию  двумерного массива: Изменение размерности динамического массива Могут сложиться обстоятельства, при которых точно неизвестно, сколько элементов  потребуется в массиве. В VBA имеется возможность при помощи  оператора ReDim переопределять размерность массива, а во время объявления не  указывать его размерность. Синтаксис ReDim: ReDim [Preserve] varname(subscripts) [As Type] [, varname(subscripts) [As Type]]  varname ­ имя существующего массива; subscripts ­ размерность существующего массива; Type ­ любой тип VBA. Необходимо использовать отдельный оператор As Type для  каждого массива, который определяется; Preserve ­ необязательный аргумент. Его использование приводит к тому, что данные уже  имеющиеся в массиве, сохраняются после изменения его размерности. Примеры правильного использования оператора ReDim: Dim Array_Month() As String ­ одномерный строковый динамический массив ReDim Array_Month(29) ­ устанавливет размерность динамического массива равную 29  элементам ReDim Array_Month(1 To 30) ­ изменяет размер массива до 30 элемента ReDim Preserve Array_Month(1 To 31) ­ изменяет размер массива до 31 элемента, сохраняя  содержимое Dim Array_DBL() As Single ­ объявляет динамический массив ReDim Array_DBL(2, 9) ­ делает массив двумерным ReDim Array_DBL(3, 7) ­ изменяет размер двумерного массива ReDim Preserve Array_DBL(1 To 3, 1 To 5) ­ изменяет последний размер массива, сохраняя  содержимое Обратите внимание! Можно изменять только последнее измерение многомерного массива,  когда используется ключевое слово Preserve. Массивы VBA (ч.3) Функции LBound, UBound Функции LBound, UBound возвращают  нижнее и верхнее граничные значения  индексов статического или динамического  массива. Синтаксис:  LBound (array_Name [, dimension]) UBound (array_Name [, dimension]) array_Name ­ имя массива dimension ­ целое число (необязательный аргумент). Определяет измерение массива,  для которого надо получить верхний или  нижний предел. При отсутствии dimension  возвращается предел для первого измерения  массива. Нижеприведенный листинг демонстрирует использование функций LBound, UBound: Очистка и удаление массивов при помощи Erase Оператор Erase позволяет выполнять очистку для статических массивов и удаление ­  для динамических. Когда элементы массива заполнены, данные в массиве остаются до тех пор, пока  пользователь не присвоит новые значения элементам массива или пока VBA не  освободится от массива. Зачастую бывает, что в дальнейших вычислениях  динамический массив ни при каких обстоятельствах использоваться не будет,  поэтому нецелесообразно "держать" его в памяти компьютера, т.к. это может  сказаться на скорости работы программы. Или же может понадобиться очистить все  значения в статическом массиве, устанавливая числовые значения на 0, а строковые ­  на пустые строки. Это можно осуществить при помощи вложенных циклов ­ как было показано на предыдущем уроке. Но, можно сделать гораздо проще: Erase My_Array Данный оператор обнуляет (если массив статический) или очищает (если массив  динамический) массив My_Array. Оператор Erase удаляет из памяти динамические массивы, освобождая область  памяти, ранее используемую этим массивом. При удалении динамического массива с  помощью оператора Erase необходимо повторно создать массив с помощью  оператора ReDim перед тем, как можно будет использовать этот определенный  динамический массив снова. Поведение оператора Erase для статических массивов зависит от конкретного типа  элементов массива (см. таблицу): Тип статического массива Действие оператора Erase Любой числовой тип Устанавливает элементы массива на 0 Любой строковый тип Устанавливает элементы массива на строку  нулевой длины, а для строк фиксированной  длины ­ как все символы пробела Тип Variant Тип Object Устанавливает элементы массива на Empty Устанавливает элементы массива на Nothing Любой пользовательский тип Устанавливает каждую переменную в  пользовательском типе индивидуально:  численные ­ на 0; строковые ­ на строки  нулевой длины; Variant ­ Empty; Object ­  Nothing Управление файлами с помощью VBA Управление файлами включает действия, такие как копирование файлов, удаление  неиспользуемых файлов для освобождения области дисковой памяти, перемещение файлов с одного диска на другие и создание или удаление каталогов диска. Управление файлами  включает также такие виды обработки, как просмотр списка файлов в папке для  определения размера файла или даты и времени, когда этот файл был модифицирован в  последний раз. В нижеприведенной таблице указаны функции, операторы и методы управления файлами.  В первом столбце таблицы находится ключевое слово VBA, во втором ­ указывается,  предназначено ли ключевое слово для функции, оператора или объектного метода. В  третьем столбце содержится краткое описание назначения каждой функции, оператора или метода. Имя ChDir ChDrive CurDir Dir Категория Назначение Оператор Изменяет текущий каталог Оператор Изменяет текущий драйвер диска Функция Возвращает текущий каталог Функция Возвращает имя каталога или файла,  совпадающее с определенным именем файла,  передаваемым как строковый аргумент. Предназначена для нахождения одного или  нескольких файлов на диске. FileCopy Оператор Копирует файл FileDateTime Функция Возвращает значение типа Date, содержащее  дату и время, когда этот файл был изменен  последний раз. FileLen Функция Возвращает длину файла в байтах GetAttr Функция GetOpenFileName Метод GetSaveAsFileName Метод Возвращает число, представляющее  объединенные атрибуты файла или каталога  диска, такие как System, Hidden и т.д. Отображает Excel­диалоговое окно Open и  возвращает имя файла, выбранное  пользователем. В Word не имеется. Отображает Excel­диалоговое окно Save As и  возвращает имя файла, выбранное  пользователем. В Word не имеется. Kill MkDir Name RmDir SetAttr Оператор Удаляет файлы с драйвера диска. Оператор Создает каталог диска. Оператор Переименовывает или перемещает файл. Оператор Удаляет каталог диска. Оператор Устанавливает атрибуты файла. Операторы, функции и объектные методы, имеющиеся в VBA, делятся на шесть различных  функциональных частей:  Получение или изменение атрибутов файла;  Выборка или нахождение имен файлов;  Получение или изменение текущего драйвера диска и папки или создание и удаление  папок диска;  Копирование или удаление файлов;  Переименование или перемещение файлов;  Получение информации о файлах, такой как длина файла, дата и время, когда этот  файл был модифицирован последний раз. 3.7 Массивы Массивы используются для хранения в памяти множества значений. Вместо того, чтобы  объявлять множество похожих друг на друга переменных, часто гораздо удобнее  воспользоваться массивом. Объявление массива производится очень просто: Dim MyArray (2) As Integer Такой массив может хранить три целочисленных элемента. 2 — это верхняя граница  массива (upper bound). Количество элементов, которое может хранить массив, — от 0 до  верхней границы включительно. Если вам хочется, чтобы нумерация элементов в массиве начиналась с 1, то в раздел  объявлений модуля нужно внести команду Option Base 1 В принципе, тип данных для массива можно не объявлять: Dim MyArray (2) В этом случае для элементов массива будет использован тип Variant. Такой массив сможет  хранить в себе элементы разных типов данных, но требования к памяти у него будут выше  и работать он будет чуть медленнее. Присвоить значение отдельному элементу массива (в нашем случае — первому) можно  очень просто: MyArray (0) = 100 А затем это значение можно будет извлечь: MsgBox MyArray (0) Массивы вполне могут быть многомерными: Dim MyArray (4, 9) В каждой строке многомерного массива удобно хранить данные, относящиеся к одному  объекту (например имя сотрудника, уникальный номер, номер телефона). В VBScript в  одном массиве может быть до 60 измерений. Часто необходимы массивы динамические — те, размер которых можно изменять в ходе  выполнения. Динамический массив объявляется следующим образом: Dim MyArray () '­ объявляем массив без верхней границы, эту строку можно ‘пропустить ReDim MyArray (4) ' — изменяем размер массива Команда ReDim не только изменяет размер массива, но и удаляет из него все старые  значения. Чтобы старые значения сохранить, используется ключевое слово Preserve: ReDim Preserve MyArray (7) Однако если новый размер массива меньше, чем кол­во помещенных в него элементов,  слово Preserve не поможет — часть данных все равно будет потеряна. Массивы можно создавать и заполнять одновременно при помощи встроенной функции  Array(): Dim MyArray MyArray = Array(100, 200, 300, 400, 500) Указывать размер массива необязательно — он будет автоматически настроен в  соответствии с кол­вом передаваемых элементов. Очистить массив можно командой Erase: Erase MyArray Массив фиксированной длины просто очищается, динамический массив  разинициализируется — его придется инициализировать (определять размер) заново. В динамических массивах часто не известно, сколько элементов в массиве. Для  определения кол­ва элементов используется функция UBound() (если массив одномерный  или вас интересует размер первого измерения, то измерение передавать не надо): UBound (имяМассива [, измерение]) Как ни удивительно, но при программировании в VBA вам редко придется сталкиваться с  массивами. Вместо них в объектных моделях приложений Office обычно используются  коллекции. Коллекции — это специальные объекты, которые предназначены для хранения  наборов одинаковых элементов. Например, в Word предусмотрена коллекция Documents  для хранения элементов Document — то есть всех открытых документов, в Excel —  коллекции Workbooks (открытые книги) и Worksheets (листы в книге) и т.п. Коллекции  обычно удобнее, чем массивы: они изначально безразмерны и в них предусмотрен  стандартный набор свойств и методов (метод Add() для добавления нового элемента,  свойство Count для получения информации о количестве элементов, метод Item() для  получения ссылки на нужный элемент) Подробнее про работу с коллекциями будет  рассказано в главе 4 этой книги. Задание для самостоятельной работы 3.3 Работа с циклами Подготовка:  Создайте новый документ Word с именем C:\LabLoops.doc. Наберите в этом  документе несколько предложений с текстом.  Откройте редактор Visual Basic и создайте в этом документе новый стандартный  модуль. Задание 1: Создайте в этом стандартном модуле процедуру ForNextSub(), которая бы выводила бы  последовательно 10 окон сообщений с цифрами от 1 от 10. Задание 2: Создайте в этом программном модуле процедуру ForEachSub(), которая бы выводила в  окна сообщений последовательно каждое слово в вашем документе LabLoops. Коллекцию (массив) всех слов документа можно получить при помощи конструкции  ThisDocument.Words. Значение каждого слова можно получить при помощи свойства Text  элемента этой коллекции.

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic

Массивы в Visual Basic
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.
17.02.2017