Техническая поддержка :

Современные решения

для защиты Windows программ

и восстановления исходного кода

Руководство по Visual Basic


Окно диалога Вставка файла

Служит для поиска и вставки файла в модуль проекта.

Параметры окна диалога

Папка

Отображает список доступных компьютеров, серверов, дисков и папок, используемых для поиска открываемого проекта.

Переход на один уровень вверх

Отображает список папок или дисков, находящихся на один уровень выше текущей папки.

Создать новую папку

Создает новую папку.

Мелкие значки

Отображает папки и документы в виде списка маленьких значков и имен.

Сведения

Отображает папки и документы в виде списка, включающего значок, имя, размер (только для документов), тип, дату и время последнего изменения.

Имя файла

Служит для ввода или выбора имени вставляемого файла.

Тип файлов

Служит для выбора типа файла; по умолчанию задаются текстовые файлы (*.txt). Файлы выбранного типа появляются в списке имен файлов.

Открыть

Вставка выбранного файла.

Отмена

Закрытие окна диалога без вставки файла.

Окно UserForm

Позволяет создавать в проекте окна и окна диалога. Допускается рисование и просмотр элементов правления в форме.

При разработке формы:

Каждое окно имеет кнопки Развернуть, Свернуть и Закрыть.

Возможен просмотр и изменение размеров сетки формы на вкладке Общие окна диалога "Параметры".

Кнопки панели элементов служат для вставки в форму элементов управления. На вкладке Общие окна диалога "Параметры" возможно задать выравнивание элементов по линиям сетки.

Окно диалога Дополнительные элементы...

Позволяет добавлять в панель элементов проекта дополнительные элементы управления.

Параметры окна диалога

Доступные элементы Отображает доступные специальные элементы управления.

Примечание. Используемые в проекте элементы управления не могут быть удалены.

Показать Определяет элементы, выводимые в списке доступных элементов. Возможен выбор любого из следующих вариантов.

Только выбранные элементы - Отображает только те элементы из списка доступных элементов, которые выбраны для включения в проект.

Путь Отображает путь к элементу, выбранному в списке доступных элементов.

Окно диалога Последовательность перехода

Отображает порядок перехода между объектами и позволяет его изменять.

Параметры окна диалога

Последовательность Список объектов в порядке расположения их в форме.

Переместить вверх При каждом нажатии перемещает выделенный объект на одну позицию в порядке перехода вверх.

Переместить вниз При каждом нажатии перемещает выделенный объект на одну позицию в порядке перехода вниз

Окно диалога Вставка процедуры

Вставляет новую процедуру Sub, процедуру Function или процедуру Property. Тут же возможна установка общей или личной области определения, а также превращение всех локальных переменных процедуры в статические.

Параметры окна диалога

Имя Имя новой процедуры.

Тип Задает тип создаваемой процедуры.

Подпрограмма (Sub) - Создает новую процедуру Sub.

Функция (Function) - Создает новую процедуру Function.

Свойство (Property) - Создает пару процедур свойства Let и Get.

Область определения Устанавливает общую или личную область определения процедуры.

Все локальные переменные считать статическими Добавляет в описание процедуры ключевое слово Static.

OK Вставляет шаблон процедуры в окно модуля.

Отмена Закрывает окно диалога без вставки новой процедуры.

Команда Программа (меню Вид)

Выводит окно модуля класса для выделенного объекта.

Кнопка панели инструментов: . Клавиша быстрого вызова: F7.

Команда Вернуться к последней позиции (меню "Вид")

Эта команда позволяет быстро перемещаться из одного места программы в другое. Команда доступна в окне модуля, только если редактировался текст программы или вызывалась команда Описание. В Visual Basic сохраняются последние 8 строк, над которыми выполнялись какие-либо операции.

Клавиша быстрого вызова: CTRL+SHIFT+F2.

Команда Просмотр объектов (меню "Вид")

Выводит окно просмотра объектов со списками библиотек объектов, библиотек типов, классов, методов, свойств, событий и констант, которые могут использоваться в программе, а также модули и процедуры, описанные в текущей базе данных.

Кнопка панели инструментов: . Клавиша быстрого вызова: F2.

Команда Свойства (меню "Вид")

Выводит окно свойств, в котором перечисляются свойства времени разработки для выделенной формы, элемента управления, класса, проекта или модуля.

Кнопка панели инструментов: . Клавиша быстрого вызова: F4.

Команда Панель элементов (меню "Вид")

Выводит или скрывает панель элементов, содержащую доступные в настоящий момент элементы управления.

Кнопка панели инструментов: .

Команда Стек вызова (меню "Вид")

Выводит окно диалога стек вызова со списком процедур, чью выполнение началось, но в данный момент еще не завершилось. Команда доступна только в режиме прерывания.

При выполнении Visual Basic процедуры, она заносится в список активных вызовов. Если эта процедура вызывает другую, в списке активных вызовов оказывается уже две процедуры. Каждый раз, при вызове процедурой другой процедуры Sub, процедуры Function или процедуры Property, последняя добавляется в список. Процедура удаляется из списка, как только управление возвращается в вызывающую процедуру. Вызванные из окна проверки процедуры также вносятся в список вызовов.

Вызов окна диалога также возможен с путем нажатия кнопки вызова (...) рядом с полем процедуры в области Локальные окна отладки.

Кнопка панели инструментов: Клавиша быстрого вызова: CTRL+L.

Команда Объект (меню "Вид")

Выводит активный элемент.

Кнопка панели инструментов: . Клавиша быстрого вызова: SHIFT+F7.

Команда Окно отладки (меню "Вид")

Отображает окно проверки, а также результаты работы отлаживаемых инструкций программы или команд, вводимых непосредственно в окне.

Окно проверки полезно использовать для:

Тестирования сложного или нового текста программы.

Запроса или изменения значения переменной во время выполнения программы. При остановке следует присвоить переменной новое значение точно так, как это делается в программе.

Запроса или изменения значения свойства во время выполнения программы.

Вызова процедуры таким же образом, как это делается в программе.

Просмотра отладочной информации, выводимой программой во время выполнения.

Кнопка панели инструментов: . Клавиша быстрого вызова: CTRL+G.

Команда Окно локальных переменных (меню "Вид")

Отображает область Локальные окна отладки и автоматически показывает все переменные из текущего стека и их значения.

Область Локальные автоматически обновляется каждый раз при переключении из режима времени выполнения в режим прерывания, а также при изменении содержимого стека.

Кнопка панели инструментов: .

Команда Окно контрольного значения (меню "Вид")

Отображает область Контрольные окна отладки, а также текущие контрольные выражения. Если в текущей базе данных описаны контрольные выражения, область Контрольные появляется автоматически.

Если при входе в режим прерывания содержание выражения находится вне области определения, текущее его значение не показывается.

Кнопка панели инструментов: .

Команда Описание (меню "Вид")

Эта команда выводит в окне модуля место описания переменной или процедуры, на имя которой установлен указатель. Если описание находится в ссылаемой библиотеке, оно выводится в окне просмотра объектов.

Клавиша быстрого вызова: SHIFT+F2.

Команда Панели инструментов (меню "Вид")

Выбор этой команды приводит к появлению списка встроенных в Visual Basic панелей инструментов, также команды Настройка. Возможно:

Включение и выключение панелей инструментов

Перемещение панелей инструментов по рабочему столу.

Отладка Выводит панель инструментов Отладка, содержащую кнопки для общих команд отладки.

Правка Выводит панель инструментов Правка, содержащую кнопки для общих команд редактирования.

Стандарт Выводит панель инструментов Стандарт, являющуюся панелью инструментов по умолчанию.

UserForm Выводит панель инструментов UserForm, содержащую кнопки для работы с формой.

Настройка Выводит окно диалога Настройка, где возможна настройка или создание панелей инструментов и строк меню.

Команда Окно проекта (меню "Вид")

Эта команда выводит Окно проекта с иерархическим списком открытых баз данных и их содержимым.

Окно проекта является инструментом лишь для перемещения и управления. Невозможно с его помощью построить приложение.

Кнопка панели инструментов: . Клавиша быстрого вызова: CTRL+R.

Окно просмотра объектов

Окно или область окна контрольного значения

Команды меню "Окно"

"Разделить"

Переключает разделение окна модуля горизонтально на две части. Эта команда доступна, только когда активно окно модуля.

Кнопка панели инструментов:

"Сверху вниз"

Размещает все окна открытого документа проекта горизонтально.

Кнопка панели инструментов:

"Слева направо"

Размещает все окна открытого документа проекта вертикально.

Кнопка панели инструментов:

"Каскадом"

Размещает все окна открытого документа проекта так, что они перекрываются и видны заголовки всех из них.

Кнопка панели инструментов:

"Упорядочить значки"

Упорядочивает значки всех свернутых окон документов, размещая их вдоль нижнего левого края окна приложения.

"Список окон"

Выводит список всех окон открытого документа.

 

Устранение конфликтов имен

При попытке создать или использовать идентификатор , определенный ранее, возникает конфликт имен. В некоторых случаях при конфликтах имен вырабатываются ошибки типа "Обнаружено повторяющееся имя" или "Повторяющееся описание в текущей области определения". Если конфликты имен не обнаружены, они могут привести к ошибкам в программе, и, как следствие, к ошибочным результатам. Это особенно вероятно в том случае, если все переменные не были описаны явным образом до их применения.

Для предотвращения большинства конфликтов имен необходимо аккуратно разобраться с областями определения идентификаторов для данных, объектов и процедур. Язык Visual Basic имеет три уровня областей определения: уровень процедуры, личный уровень модуля и общий уровень модуля.

Конфликты имен могут возникать, если идентификатор:

Является видимым более чем на одном уровне областей определения.

Имеет на одном и том же уровне два различных значения.

Например процедуры в различных модулях могут иметь одинаковое имя. Таким образом процедура по имени MySub может быть определена в модулях Mod1 и Mod2. Конфликты не возникают, если каждая процедура вызывается только из других процедур в ее собственном модуле. Однако возможно возникновение ошибки, если MySub вызывается из третьего модуля и отсутствует полная ссылка на определенный модуль, позволяющая различить эти две процедуры MySub.

Большинство конфликтов имен может быть разрешено с помощью предшествующего каждому идентификатору указателя, состоящего из имени модуля и, если нужно, имени проекта. Например:

YourProject.YourModule.YourSub MyProject.MyModule.MyVar

Предшествующая программа вызывает процедуру Sub YourSub и передает переменную MyVar как аргумент. Допускается использование любой комбинации указателей, позволяющей различить одинаковые идентификаторы.

Visual Basic сопоставляет каждую ссылку на идентификатор с "ближайшим" описанием такого идентификатора. Например, если MyID описан как Public в двух модулях проекта (Mod1 и Mod2), то можно указать MyID, описанный в Mod2 без дополнительного указания внутри Mod2, но необходимо точно задать его имя (как Mod2.MyID) для ссылки на него в Mod1. Это справедливо также, если Mod2 находится в другом проекте, который является напрямую адресуемым проектом. Однако если Mod2 находится в косвенно адресуемом проекте, т.е. таком, на который ссылается напрямую адресуемый проект, ссылки на его переменную по имени MyID всегда должны быть полными и содержать имя проекта. Если ссылка на MyID выполняется из внешнего напрямую адресуемого модуля, то она сопоставляется с первым описанием, обнаруженным в следующем порядке:

Напрямую адресуемые проекты в том порядке, в котором они появляются в окне диалога Ссылки, вызываемого из меню Сервис.

Модули каждого проекта. Следует отметить, что не существует внутреннего порядка для модулей проекта.

Имена объектов главного приложения (например, R1C1 в Microsoft Excel) не могут повторно использоваться на других уровнях области определения.

Совет. К типичным ошибкам, вызывающим конфликты имен, относятся неоднозначные задания имен, повторяющиеся описания, неописанные идентификаторы и ненайденные процедуры. Задание в начале каждого модуля инструкции Option Explicit, требующее явного описания переменных до их использования, помогает избежать как возможных конфликтов имен, так и ошибок, связанных с идентификаторами.

Вызов процедур с одинаковыми именами

Вызов процедуры, находящейся в любом модуле одного проекта, осуществляется так же, как вызов процедуры в активном модуле. Однако если два (или более) модуля содержат процедуры с одинаковыми именами, необходимо явно указать имя модуля в инструкции вызова процедуры, как показано в следующем примере:

Sub Main()

Module1.MyProcedure

End Sub

Если две разные процедуры в двух различных проектах названы одинаковыми именами, то при вызове этих процедур необходимо явно указать имя проекта. Например, следующая процедура вызывает процедуру Main в модуле MyModule в проекте MyProject.vbp.

Sub Main()

[MyProject.vbp].[MyModule].Main

End Sub

Примечание. Разные приложения имеют различные имена для проекта. Например в Microsoft Access проект называется базой данных (.mdb); а в Microsoft Excel он называется книгой Excel (.xls).

Правила вызова процедур

При переименовании модуля или проекта необходимо изменить имя данного модуля или проекта во всех инструкциях вызова; в противном случае Visual Basic не сможет найти вызываемую процедуру. Чтобы найти и заменить текст в модуле, можно использовать команду Заменить в меню Правка.

Для предотвращения конфликта имен между адресуемыми проектами рекомендуется давать процедурам уникальные имена. Тогда можно вызывать процедуры без указания проекта или модуля.

Вызов процедур Property

В следующей таблице приводится синтаксис для вызова процедур-свойств:

Процедура

Синтаксис

 

Property Let

[объект.]свойство(аргументы)] = аргумент

Property Get

переменная = [объект.]свойство(аргументы)]

Property Set

Set [объект.]свойство[.(аргументы)] = переменная

При вызове процедур Property Let или Property Set всегда имеется один аргумент справа от знака равенства (=).

При описании процедур Property Let или Property Set с несколькими аргументами Visual Basic передает крайний справа аргумент последнему аргументу в описании Property Let или Property Set. Например, следующая диаграмма показывает как аргументы в вызове процедуры Property сопоставляются с аргументами в описании Property Let:

На практике процедуры с несколькими аргументами используются только для создания массивов свойств.

Вызов процедур Sub и Function

Чтобы вызвать процедуру Sub из другой процедуры, следует указать имя этой процедуры и значения для всех требуемых аргументовs. Использование инструкции Call не обязательно, однако если она все же используется, аргументы должны быть заключены в скобки.

Можно использовать процедуру Sub для организации других процедур, это облегчает процесс восприятия этих процедур и их отладку. В следующем примере процедура Sub Main вызывает процедуру Sub MultiBeep, передавая значение 56 для ее аргумента. По окончании работы MultiBeep управление возвращается к Main, и Main вызывает процедуру Sub Message. Message показывает окно сообщения, когда пользователь выбирает мышью OK, управление возвращается к Main, и Main завершается.

Sub Main()

MultiBeep 56

Message

End Sub

Sub MultiBeep(numbeeps)

For counter = 1 To numbeeps

Beep

Next counter

End Sub

Sub Message()

MsgBox "Пора сделать перерыв!"

End Sub

Вызов процедур Sub с несколькими аргументами

Следующий пример показывает два способа вызова процедуры Sub с несколькими аргументами. Когда процедура HouseCalc вызывается во второй раз, аргументы заключаются в скобки, поскольку используется инструкция Call.

Sub Main()

HouseCalc 99800, 43100

Call HouseCalc(380950, 49500)

End Sub

Sub HouseCalc(price As Single, wage As Single)

If 2.5 * wage <= 0.8 * price Then

MsgBox "Этот дом слишком дорогой."

Else

MsgBox "Цена этого дома приемлема."

End If

End Sub

Использование скобок при вызове процедур Function

Чтобы получить возвращаемое значение функции, надо присвоить эту функцию переменной и заключить аргументы в скобки, как показано в следующем примере.

Answer3 = MsgBox("Вам нравится Ваша зарплата?", 4, "Question 3")

Если возвращаемое значение функции не требуется, можно вызвать функцию точно так же, как процедуру Sub. Надо опустить скобки, указать список аргументов и не присваивать функцию переменной, как показано в следующем примере.

MsgBox "Конец задачи!", 0, "Список задач"

Внимание! Наличие скобок в предыдущем примере приведет к синтаксической ошибке.

Передача именованных аргументов

Инструкция в процедуре Sub или Function может передавать значения вызываемым процедурам с помощью именованных аргументов. Именованные аргументы можно перечислять в любом порядке. Именованный аргумент состоит из имени аргумента, за которым следует двоеточие, знак равенства (:=) и значение, присваиваемое аргументу.

В следующем примере вызывается функция MsgBox с помощью именованных аргументов без возвращаемого значения.

MsgBox Title:="Список задач", Prompt:="Конец задачи!"

Следующий пример вызывает функцию MsgBox с помощью именованных аргументов. Возвращаемое значение присваивается переменной answer3.

answer3 = MsgBox(Title:="Question 3", _

Prompt:="Вам нравится Ваша зарплата?", Buttons:=4)

Создание объектных переменных

Объектная переменная может рассматриваться как объект, ссылку на который она содержит. С ее помощью возможно задание или возвращение свойств объекта или использование любых его методов.

Для создания объектной переменной:

1Опишите объектную переменную.

2Присвойте эту объектную переменную объекту.

Описание объектной переменной

Для описания объектной переменной применяется инструкция Dim или одна из других инструкций описания (Public, Private или Static). Переменная, которая ссылается на объект, должна иметь тип Variant, Object, или тип определенного объекта. Например, возможны следующие описания:

' Описывает MyObject с типом Variant.

Dim MyObject

' Описывает MyObject с типом Object.

Dim MyObject As Object

' Описывает MyObject с типом Font.

Dim MyObject As Font

Примечание. Если объектная переменная используется без предварительного описания, она по умолчанию приобретает тип даных Variant.

Имеется возможность описать объектную переменную с типом данных Object в том случае, если определенный объектный тип не известен до выполнения процедуры. Тип данных Object позволяет создать универсальную ссылку на любой объект.

Если определенный объектный тип известен, следует описать объектную переменную с этим объектным типом. Например, если используемое приложение содержит объектный тип Sample, возможно описание переменной для этого объекта с помощью одной из следующих инструкций:

Dim MyObject As Object' Описывает объект как универсальный.

Dim MyObject As Sample' Описывает объект только с типом Sample.

Описание определенных объектных типов обеспечивает автоматическую проверку типа данных, более быстрое выполнение и улучшает читабельность текста программы.

Присвоение объекта объектной переменной

Для присвоения объекта объектной переменной применяется инструкция Set. Имеется возможность присвоить объектное выражение или Nothing. Например допустимы следующие присвоения объектной переменной:

Set MyObject = YourObject' Присваивает ссылку на объект.

Set MyObject = Nothing' Удаляет ссылку на объект.

Можно комбинировать описание объектной переменной с присваиванием ей объекта с помощью ключевого слова New в инструкции Set. Например:

Set MyObject = New Object' Создать и присвоить

Задание для объектной переменной значения Nothing прекращает сопоставление этой переменной с каким-либо определенным объектом. Это предотвращает случайное изменение объекта при изменении переменной. Объектная переменная всегда имеет значение Nothing после закрытия объекта, с которым она сопоставляется, поэтому легко проверить, указывает ли объектная переменная на реальный объект. Например:

If Not MyObject Is Nothing Then

' Переменная ссылается на объект.

. . .

End If

Разумеется, с помощью этого теста невозможно с абсолютной уверенностью определить, закрыл ли пользователь приложение, содержащее объект, на который ссылается объектная переменная.

Ссылка на текущий экземпляр объекта

Для ссылки на текущий экземпляр объекта, в котором в данное время выполняется программа, используется ключевое слово Me. Все процедуры, связанные с текущим объектом, имеют доступ к объекту, указываемому с помощью слова Me. Ключевое слово Me полезно, в частности, для передачи сведений о текущем экземпляре объекта в процедуру из другого модуля. Например предположим, что модуль содержит следующую процедуру:

Sub ChangeObjectColor(MyObjectName As Object)

MyObjectName.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)

End Sub

Вызов этой процедуры и передача в качестве аргумента текущего экземпляра объекта выполняется с помощью следующей инструкции:

ChangeObjectColor Me

Создание рекурсивных процедур

Процедуры выделяют для хранения переменных ограниченный объем памяти. При каждом вызове процедурой самой себя выделяется дополнительный объем этой памяти. Процедура, вызывающая сама себя, называется рекурсивной. Рекурсивная процедура, которая бесконечно вызывает саму себя, приводит к ошибке. Например:

Function RunOut(Maximum)

RunOut = RunOut(Maximum)

End Function

Эта ошибка менее очевидна, если две процедуры бесконечное число раз вызывают друг друга, или некоторое условие, ограничивающее рекурсию, никогда не выполняется. Рекурсия имеет свои области применения. Например, следующая процедура использует рекурсию для вычисления факториалов:

Function Factorial (N)

If N <= 1 Then' Достигнут конец рекурсивных вызовов.

Factorial = 1' (N = 0) завершение вызовов.

Else' Повторный вызов функции, если N > 0.

Factorial = Factorial(N - 1) * N

End If

End Function

Необходимо проверить, что рекурсивная функция не вызывает себя столько раз, что начинает сказываться нехватка памяти. При возникновении ошибки, убедитесь, что процедура не вызывает себя бесконечное число раз. После этого попробуйте сэкономить память с помощью:

устранения ненужных переменных;

использования типов данных , отличных от Variant;

переосмысления логики процедуры. Часто вместо рекурсии можно воспользоваться вложенными циклами.

Назад | Содержание | Вперед

 



Главная     Программы     Статьи     Разное     Форум     Контакты