Опубликован: 31.08.2006 | Доступ: свободный | Студентов: 3927 / 218 | Оценка: 4.14 / 3.89 | Длительность: 39:16:00
ISBN: 978-5-9570-0021-3
Лекция 12:

Использование массивов и коллекций для управления данными

Следующий шаг: коллекции Visual Basic for Applications

Если в будущем вы решите написать макросы Visual Basic для приложений Microsoft Office, то обнаружите, что в объектных моделях Microsoft Word, Microsoft Excel, Microsoft Access, Microsoft PowerPoint и некоторых других приложений, которые поддерживают язык программирования Visual Basic for Applications, коллекции играют очень важную роль. Например, в Word все открытые документы текстового процессора хранятся в коллекции Documents, а каждый параграф текущего документа - в коллекции Paragraphs. Вы можете манипулировать этими коллекциями с помощью цикла For Each...Next точно так же, как вы делали это с другими коллекциями из предыдущих примеров.

Например, следующий пример кода является частью макроса Word 2002, который использует цикл For Each...Next для проверки каждого открытого документа из коллекции Documents на предмет имени файла MyLetter.doc. Если этот файл в коллекции найден, макрос сохраняет его с помощью метода Save. Если файл в коллекции не найден, макрос пытается открыть этот файл из папки My Documents, расположенной на диске C.

Dim aDoc As Object
Dim docFound As Boolean
Dim docLocation As String
docFound = False
docLocation = "c:\my documents\myletter.doc"
For Each aDoc In Documents
  If InStr(1, aDoc.Name, "myletter.doc", 1) Then
    docFound = True
    aDoc.Save
    Exit For
  End If
Next aDoc
If docFound = False Then
  Documents.Open FileName:=docLocation
End If
Совет. Этот пример макроса для Word 2002 демонстрирует, как можно использовать коллекции в Visual Basic for Applications, но этот исходный код разработан для Word, а не для компилятора Visual Basic. Чтобы его проверить, необходимо запустить Word, щелкнуть на команде Macros (Макросы:) из подменю Macro (Макрос) меню Tools (Сервис), создать новое имя для макроса, а затем ввести этот код с помощью специального редактора макросов Word. (Если вы не находитесь в Word, то коллекция Documents не будет иметь для компилятора никакого смысла.)

Макрос начинается с объявления трех переменных. Объектная переменная aDoc представляет текущий элемент коллекции в цикле For Each...Next. Переменной Boolean с именем docFound будет присвоено логическое значение True, если документ в коллекции Documents найден. Строковая переменная docLocation будет содержать путь файла MyLetter.doc на диске. (Эта процедура предполагает, что файл MyLetter.doc находится в папке My Documents на диске C.)

Цикл For Each...Next перебирает все документы в коллекции Documents и ищет файл MyLetter. Если файл с помощью функции InStr (которая ищет одну строку в другой) обнаружен, то файл сохраняется. Если файл не найден, макрос пытается открыть его с помощью метода Open объекта Documents. Также обратите внимание на оператор Exit For, который используется для выхода из цикла For Each...Next, когда файл MyLetter найден и сохранен на диск. Exit For - это специальный оператор программы, который можно использовать для выхода из циклов For...Next или For Each...Next, когда продолжение их работы становится нежелательным. В нашем примере, если файл MyLetter.doc в коллекции уже найден, продолжение поиска будет безрезультатно. Здесь оператор Exit For предоставляет удобный способ остановить цикл сразу, как только его задача выполнена.

Краткая справка по лекции 11

Чтобы Сделайте следующее
Создать массив Задайте размерность массива с помощью ключевого слова Dim. Например: Dim Employees(9) As String
Создать открытый массив Задайте размерность массива с помощью ключевого слова Public и разместите его объявление в стандартном модуле. Например: Public Employees(9) As String
Поместить значение в массив Укажите имя массива, индекс элемента массива и значение. Например: Employees(5) = "Leslie"
Отформатировать текстовую строку с использованием символов возврата каретки и табуляции Используйте в коде программы константы vbCrLf и vbTab. (Чтобы добавить эти значения, используйте оператор &.)
Создать динамический массив При объявлении укажите имя и тип массива, но не указывайте количество его элементов. (Если массив имеет несколько измерений, вставьте запятые между измерениями, но не вводите числа.) При выполнении программы укажите размер массива с помощью оператора ReDim. Например: ReDim Temperatures(10)
Обработать элементы массива

Напишите цикл For \dots Next, который использует переменную-счетчик цикла для адресации каждого из элементов этого массива. Например:

Dim i As Short
Dim Total As Single
For i = 0 To UBound(Temperatures)
  Total = Total + Temperatures(i)
Next
Изменить размер массива и сохранить в нем предыдущие данные Используйте в операторе ReDim ключевое слово Preserve. Например: ReDim Preserve myCube(25, 25, 50)
Обработать объекты в коллекции

Напишите цикл For Each \dots Next, который адресует каждый член коллекции по отдельности. Например:

Dim ctrl As Control
For Each ctrl In Controls
  ctrl.Text = "Нажми меня!"
Next
Переместить объекты из коллекции Controls по экрану слева направо

Измените в цикле For Each \dots Next свойство Control.Left каждого из объектов коллекции. Например:

Dim ctrl As Control
For Each ctrl In Controls
  Ctrl.Left = Ctrl.Left + 25
Next Ctrl
Использовать для объекта в коллекции специальную обработку

Проверьте с помощью цикла For Each \dots Next свойство Name объекта из коллекции. Например:

Dim ctrl As Control
For Each ctrl In Controls
  If ctrl.Name <> "btnMoveObjects" Then
  ctrl.Left = ctrl.Left + 25
  End If
Next
Создать новую коллекцию и добавить в нее члены

Объявите переменную с помощью записи New Collection. Для добавления членов используйте метод Add. Например:

Dim URLsVisited As New Collection()
URLsVisited.Add(TextBox1.Text)
Жанболат Шаймерден
Жанболат Шаймерден

Можно ли выбирать язык для надписей и команд в среде разработки?

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Светлана Ведяева
Светлана Ведяева
Россия, Саратов