Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA-Laboratorny_praktikum.doc
Скачиваний:
5
Добавлен:
01.04.2025
Размер:
4.56 Mб
Скачать

2.2.5.Отслеживание значений свойств и переменных

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

  1. Выделите любую переменную или фрагмент кода и щелкните по кнопке Контрольное значение (Quick Watch). На экране появится одноименное диалоговое окно, в котором отображается имя программы, выделенное выражение и его текущее значение (Рис. 2 -13).

Рис. 2‑13. Диалоговое окно Контрольное значение (Quick Watch)

  1. Щелкните по кнопке Добавить (Add), – в нижней части окна появится окно контрольных значений (Watches), в которое будет добавлена указанная переменная (Рис. 2 -14).

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

Эту же операцию можно проделать быстрее: выделите переменную и перетащите её в окно контрольных значений (Watches).

Чтобы удалить ненужную переменную или другой объект из окна контрольных значений щелкните по нему правой кнопкой мышки и выполните команду Удалить контрольное значение (Delete Watch).

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

Задание:

  1. В окно контрольных значений добавьте переменные i, СлучЧисло и содержимое ячейки Cells(i,1).Value (Рис. 2 -14):

Рис. 2‑14. Окно контрольных значений (Watches)

  1. Запустите программу в пошаговом режиме и посмотрите, как изменяются их значения.

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

Это окно полезно, если вы хотите просмотреть переменные, не добавляя их в список контрольных значений. Чтобы поработать с окном локальных переменных (Locals):

  1. Видоизмените программу СлучайныеЧисла следующим образом:

Sub СлучайныеЧисла()

Dim СлучЧисло(10) As Integer

For i = 1 To 10

СлучЧисло(i) = Int(100 * Rnd())

Cells(i, 1).Value = СлучЧисло(i)

Next i

MsgBox "Случайные числа разыграны!"

End Sub

где СлучЧисло(10) – одномерный массив.

  1. Откройте окно локальных переменных и запустите программу в пошаговом режиме. Обратите внимание, что массивы можно разворачивать и сворачивать, щелкая по знакам + и –, расположенным рядом с ними (Рис. 2 -15 и Рис. 2 -16).

Рис. 2‑15. Окно локальных переменных со «свернутым» массивом

Рис. 2‑16. Окно локальных переменных с «развернутым» массивом

В окне отладки Проверка (Immediate) вы можете выполнять отдельные инструкции VBA. Попробуйте, например, ввести в него следующую команду, затем нажмите клавишу [Enter]:

InputBox("Сколько вам лет?")

Эта инструкция будет выполнена немедленно: на экране появится диалоговое окно с вопросом о Вашем возрасте. В окне Проверка (Immediate) можно также изменить значения переменных при выполнении кода.

3.Объекты Application, Workbook, Worksheet и Range. Встроенные функции Dir, MkDir, MsgBox, InputBox

3.1.Программа СлучайныеЧисла

Для знакомства с некоторыми методами и свойствами указанных объектов внесем изменения в программу СлучайныеЧисла и напишем код, который:

  1. определяет количество листов в новой рабочей книге и сохраняет его в переменной Листов;

  2. устанавливает количество листов в новой рабочей книге, равное 1;

  3. добавляет новую книгу;

  4. изменяет название первого листа на Случ. числа;

  5. разыгрывает 10 случайных чисел, лежащих в интервале от 0 до 100, и помещает их в первые десять ячеек первого столбца:

For i = 1 To 10

СлучЧисло= Int(100 * Rnd())

Cells(i, 1).Value = СлучЧисло

Next i

  1. активизирует ячейку А1 листа Случ. числа;

  2. добавляет в конец книги новый рабочий лист;

  3. активизирует лист Случ. числа;

  4. возвращает количество листов в новой рабочей книге, которое было до его изменения;

  5. сохраняет текущую книгу в файле C:\St\Случайные числа.xls;

  6. выводит сообщение: Случайные числа разыграны!.

Прежде чем писать программу, подумайте о том, какие команды можно записать с помощью макрорекордера. Это особенно актуально, если вы не помните синтаксис команды или какой-то фрагмент кода – большой по объему (например, фрагмент кода, относящийся к форматированию таблицы Excel).

В данном случае, с помощью макрорекордера можно записать пункты (2) – (4), (6), (8) и (10). Полученный макрос будет выглядеть так7:

Sub Макрос1()

With Application

.UserName = "Муратова С.Ю."

.StandardFont = "Arial Cyr"

.StandardFontSize = "10"

.DefaultFilePath = "D:\"

.SheetsInNewWorkbook = 3

.EnableSound = False

.RollZoom = False

End With

Workbooks.Add

Sheets("Лист1").Select

Sheets("Лист1").Name = "Случ. числа"

Range("A1").Select

Sheets("Случ. числа").Select

Sheets.Add

ActiveWorkbook.SaveAs _ Filename:="C:\St\Случайные числа.xls", _

FileFormat:=Normal, Password:="", _

WriteResPassword:="", ReadOnlyRecommended: = False, _

CreateBackup:=False

End Sub

Даже не зная конструкцию With легко сообразить, что строки программы со 2-й по 10-ю задают свойства объекта Application. Так как нам надо изменить только одно свойство (SheetsInNewWorkbook), то вместо блока With можно написать одну команду:

Application.SheetsInNewWorkbook = 1

11-я строка макроса – добавление рабочей книги (метод Add) – относится к одиночному объекту семейства рабочих книг (Workbooks).

Так как в нашей рабочей книге имеется только один лист, то следующую команду (активизация листа с именем Лист1, метод Select) можно из программы исключить.

В 13-й строке для объекта Лист1 задается новое значение свойства Name (Лист1 переименовывается). Объект Лист1 – это одиночный объект семейства листов рабочей книги. Согласно правилу, к одиночному объекту семейства обращаются либо по имени, либо по его номеру в семействе объектов. Поэтому 13-ю строку можно записать и в таком виде:

Sheets(1).Name = "Случ. числа"

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

ActiveSheet.Name = "Случ. числа"

В 14-й строке активной становится ячейка с адресом А1 (объект – Range , метод – Select).

15-я и 16-я строки относятся к добавлению листа. ОБРАТИТЕ ВНИМАНИЕ: при выполнении этой операции новый лист вставляется перед текущим листом. Для того чтобы добавить лист в конец рабочей книги необходимо передать в метод аргумент After (который указывает номер листа, после которого вставляется новый лист). В данном конкретном случае, когда в книге содержится только один лист, команду можно было бы записать так:

Sheets.Add After:=Worksheets(1)

Мы же запишем её в общем случае, когда количество листов в рабочей книге определяется свойством Count:

Sheets.Add After:=Worksheets(Worksheets.Count)

В 17-й строке текущая книга сохраняется в папке St под именем Случайные числа.xls. Так как мы не изменяем аргументы, установленные по умолчанию, то эту команду можно записать в следующем виде:

ActiveWorkbook.SaveAs Filename:="C:\St\Случайные числа.xls"

Обратите внимание на то, как VBA ссылается на активную книгу (ActiveWorkbook).

Дополним код оставшимися командами и в результате получим следующую процедуру:

Sub СлучайныеЧисла()

Dim СлучЧисло As Integer

Dim Листов As Integer

Листов = Application.SheetsInNewWorkbook

Application.SheetsInNewWorkbook = 1

Workbooks.Add

ActiveSheet.Name = "Случ. числа"

For i = 1 To 10

СлучЧисло = Int(100 * Rnd())

Cells(i, 1).Value = СлучЧисло

Next i

Sheets.Add After:=Worksheets(Worksheets.Count)

Worksheets(1).Select

Range("A1").Select

Application.SheetsInNewWorkbook = Листов

ActiveWorkbook.SaveAs Filename:="C:\St\Случайные числа.xls"

MsgBox "Случайные числа разыграны!"

End Sub

Комментарии к программе:

1-я строка – строка начала процедуры СлучайныеЧисла.

Во 2-й и 3-й строках объявляются 2 переменные: СлучЧисло и Листов – как целочисленные переменные.

4-я строка: в переменную Листов считываем значение свойства Excel «Листов в новой книге». Таким образом мы запомнили значение этого параметра, который был установлен до нашего вмешательства.

В 5-й строке изменяем это свойство на 1 (т.е. теперь в новых книгах будет 1 лист).

6-я строка: добавляем новую книгу.

В 7-ой строке переименовываем единственный лист на Случ. числа.

В строках с 8-ой по 11 разыгрываем 10 случайных чисел. В ней для генерации случайного целого числа от 0 до 100 используются встроенные функции Rnd и Int. Первая из них генерирует действительное случайное число в интервале от 0 до 1 и может принимать один аргумент — «затравочное» число (подробности — в справочной системе VBA). Функция Int преобразует действительное число в целое, удаляя все цифры после десятичного разделителя (то есть всегда округляя до меньшего). Умножая случайное число, полученное функцией Rnd, на 100 и отбрасывая дробную часть, получаем случайное целое, принадлежащее диапазону от 0 до 100.

Обратите внимание на 10-ю строку программы. Здесь объект, ячейка, задается свойством Cells, где 1-й индекс – это номер строки, а второй индекс – номер столбца. Данная конструкция особенно удобна в случае, когда заполнение/считывание ячеек осуществляется в цикле или заранее не известен адрес конечных ячеек.

12-я строка – добавление листа в конец книги.

13-я строка – активизация 1-го листа (Случ. числа) – пользователь должен сразу увидеть результаты выполнения программы, а не рыскать по книге в их поиске.

14-я строка – активизация ячейки А1. Даже если вы активизировали лист с результатами выполнения программы, их может быть не видно или видна лишь какая-то часть. Чтобы этого не произошло, подумайте, какую часть таблицы надо показать пользователю по завершении программы и активизируйте соответствующую ячейку. В данном случае вывод результатов начинается с первой ячейке листа, поэтому эту ячейку мы и сделали текущей.

15-я строка: после того как все манипуляции выполнены, вернем настройки пользователя, которые были изменены в начале программы («Листов в новой книге»). Как вы помните, значение этого свойства мы сохранили в переменной Листов, которое возвращаем теперь объекту Application (Excel).

В 16-ой строке происходит сохранение рабочей книги на диске С:, в папке St, с именем Случайные числа.xls.

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

Задание:

    1. откройте окно локальных переменных, установите точку останова, как показано на Рис. 2 -17, и запустите программу;

Рис. 2‑17

    1. выполните цикл в пошаговом режиме, наблюдая за изменениями в окне локальных переменных;

    2. создайте панель инструментов Случайные числа. Свяжите созданный макрос с кнопкой Разыграть;

    3. запустите программу ещё раз – появится сообщение об ошибке и возникнет останов в команде, при выполнении которой произошла ошибка (Рис. 2-2);

Рис. 2‑18

    1. прервите выполнение программы.

Комментарий к ошибке:

Возникшая ошибка демонстрирует несовершенство данной программы. По мере изучения языка VBA вам придется модернизировать программу так, чтобы она была удобна пользователю и «не вылетала» ни при каких условиях.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]