По нажатии клавиши F8 выполняется очередная команда и подсвечивается следующая.
Введем начальное значение U n=1, конечное k=3, шаг s=4.
При наведении курсора на переменные отображаются их значения.
По команде меню View – Locals Window откроется окно со списком локальных переменных (то есть всех переменных, которые используются в выполняемой процедуре) и их значениями.
Обратите внимание, значения n, k, s, принятые с клавиатуры с помощью InputBox, берутся в кавычки, то есть имеют текстовый тип.
Выполняя процедуру далее, выполняя функции Val, кавычки убираются, – значит, выполняется преобразование текстового типа в числовой тип.
Продолжаем нажимать F8. Начинаем выполнять цикл. U присваивается n=1. U<k (1<3) – поэтому выполняется тело цикла. Выполняется вызов функции СилаТока, входим в функцию, выполняем её, возвращаемся в вызывающую процедуру ТаблицаФайл. Теперь выполняется вызов функции Сопротивление, входим в функцию, выполняем её, возвращаемся в вызывающую процедуру ТаблицаФайл. Выводим значения в файл. Увеличивается значение U, становится равным 2. Возвращаемся к началу цикла, проверяем: 2<3? – Да, цикл повторяется. U становится равным 3. 3<3? – Нет. 3=3? – Да, цикл повторяется еще раз. U становится равным 4. 4<3? – Нет. 4=3? – Нет – выходим из цикла. Закрывается файл. Выдается сообщение. Выходим из процедуры.
Запускать процедуру на рабочем листе будем с помощью кнопки. Которую возьмем с панели инструментов Формы.
Этой кнопке назначим макрос ТаблицаФайл. И введем текст кнопки «Построение таблицы зависимости i и R от U и запись таблицы в файл VAR11.txt».
Проверяем. Щелчком по кнопке вызывается процедура. Вводим начальное значение 500, конечное 0. Поскольку U меняется от большего к меньшему, шаг надо задать отрицательным – введем –10.
Таблица записана в файл!
Откроем Мои документы и убедимся: файл VAR11.txt создан. Откроем его в Блокноте.
Обратите внимание:
- Выводимые значения в файле разделяются запятой.
- Текстовые значения берутся в кавычки (заголовки).
Закроем Блокнот.
Предусмотрим открытие файла с рабочего листа.
Для этого в Редакторе VBA создадим процедуру ПросмотрФайла.
Она состоит из одного оператора Shell, который позволяет выполнить из программы команду операционной системы. В нашем примере такой командой будет notepad.exe, которая запускает одноименный файл из системной папки Windows, то есть запускает Блокнот. Через пробел указывается параметр команды – имя файла VAR11.txt, который надо открыть в Блокноте. Команда операционной системы берется в кавычки: "notepad.exe VAR11.txt".
Через запятую указывается второй параметр оператора Shell – vbNormalFocus, он означает: открыть окно Блокнота не в распахнутом виде, не в свернутом, а в нормальном виде.
Перейдем на рабочий лист и создадим кнопку для запуска процедуры ПросмотрФайла. Назначим ей макрос ПросмотрФайла. Введем текст на кнопке «Просмотр файла VAR11.txt».
Убедимся, что щелчок по кнопке открывает Блокнот с нашим файлом.
Закроем Блокнот.
kr09. Чтение файла VAR11.txt и запись на рабочий лист Таблица
Обеспечим Чтение файла VAR11.txt и запись его на рабочий лист Таблица.
Для этого создадим процедуру ЧтениеФайла.
Она начинается с открытия файла VAR11.txt в режиме Input (для чтения файла).
Переменная Nстроки будет отслеживать № текущей строки рабочего листа, в которую будет выводиться очередная прочитанная из файла строка таблицы. Таблица будет начинаться с 1-ой строки.
Далее начинается цикл – цикл типа Пока. Цикл начинается командой Do While, заканчивается командой Loop. Между ними – тело цикла.
Цикл типа Пока выполняется, пока выполняется истинно заданное выражение – в данном случае это Not Eof(1).
Стандартная функция Eof(1) (End jf File) возвращает логическое значение ИСТИНА, если файл закончился, и ЛОЖЬ, если нет. Логическая операция Not – логическое отрицание, логическое НЕ. Так что выражение Not Eof(1) принимает значение ИСТИНА, если файл не закончился, то есть если функция Eof(1) возвращает ЛОЖЬ.
Буквально читаем.
Выполнять, пока не End of File – пока не закончился файл.
Командой Input из 1-го файла считываются значения (в файле они разделены запятыми) и присваиваются переменным U, i, RR. Количество переменных должно быть равно количеству значений в строке файла.
Далее. На рабочем листе Таблица в ячейку на пересечении строки, заданной переменной Nстроки и 1-го столбца записывается значение переменной U.
В ячейку на этой строке во 2-ом столбце записывается значение переменной i.
В 3-ий столбец записывается значение переменной RR.
Далее увеличивается номер строки на 1.
И по команде Loop возвращаемся к началу цикла – к проверке условия Файл не закончился?
Если не закончился, из файла считывается следующая строка и записывается в очередную строку рабочего листа.
Номер строки снова увеличивается и снова – проверка условия…
Когда файл закончится, функция Eof(1) вернет значение ИСТИНА; выражение Not Eof(1) примет значение ЛОЖЬ – это признак завершения цикла.
Команда Close закрывает файл.
Команда MsgBox выдает сообщение о том, что файл прочитан и записан.
Блок-схема процедуры ЧтениеФайла на базе алгоритма цикла типа «Пока» (пока не конец файла):
- Начало процедуры. - Открытие файла. - Номеру строки присваиваем 1. - Проверяем: Не конец файла? - Если не конец, идем по ветке Да. - Читаем значения из файла. - Записываем их на рабочий лист. - Увеличиваем Nстроки на 1. - И снова – Не конец файла? - Цикл повторяется, пока не завершится файл. - Когда файл будет прочитан весь, выходим из цикла. - Закрываем файл. - Выдаем сообщение. - Конец процедуры. |
Перед выполнение процедуры ЧтениеФайла проверим наличие рабочего листа Таблица (мы его создали в самом начале курсовой работы).
Для наглядности одновременно отобразим – рабочий лист, Блокнот с файлом и текст процедуры.
Выполнять будем в пошаговом режиме, нажимая клавишу F8.
Открыть файл.
Nстроки=1.
Начало цикла.
Чтение значений из 1-ой строки файла (это заголовки таблицы) в переменные U, i, RR.
Они записываются в 1-ую строку рабочего листа.
Nстроки увеличивается на 1.
Возвращаемся к началу цикла, проверяем: Не конец файла?
Нет – читаем следующую строку файла и записываем её во 2ую строку рабочего листа.
Переходим к 3-ей строке. И цикл повторяется.
Продолжим выполнение процедуры в обычном режиме – клавиша F5.
Файл прочитан и записан на рабочий лист.
Перед новым выполнением процедуры ЧтениеФайла надо очистить рабочий лист Таблица от старых данных.
Для этого:
1. Переходим на лист.
2. Выделяем все ячейки листа.
3. Очищаем их – клавишей Del.
Сделаем так, чтобы эти действия выполнялись программно – при выполнении процедуры ЧтениеФайла.
Чтобы узнать, какие команды надо вставить для этого в процедуру, запустим команду меню Сервис – Макрос – Начать запись.
Согласимся с именем макроса Макрос1. Ок.
Появление панели инструментов Остановить запись говорит о том, что с этого момента все наши действия будут записываться в виде команд на VBA в макрос.
Итак.
1-ое действие – переходим на лист Таблица.
2-ое – выделяем все ячейки листа.
3-е – очищаем их клавишей Del.
Всё. Щелкаю кнопку Остановить запись.
Переходим в Редактор VBA. Открываем Проводник проекта – командой меню View – Project Explorer.
Обратите внимание: при записи макроса автоматичски был создан новый пользовательский модуль Module2.
Откроем его сдвоенным щелчком. И обнаружим в нем макрос Макрос1. Он состоит из трех команд, соответствующих нашим трем действиям:
1. Переход на лист Таблица.
2. Выделение ячеек листа.
3. Очистка их.
Скопируем эти три команды в буфер обмена.
Перейдем в Module1 и вставим их из буфера в начало процедуры ЧтениеФайла.
Теперь рабочий лист Таблица будет очищаться программно – при выполнении процедуры ЧтениеФайла.
Module2 с макросом нам больше не нужен – удалим его. В контекстном меню выберем команду Remove Module2. В ответ на вопрос: Сохранить удаляемый модуль в отдельном файле? – ответим Нет.
Закроем Проводник проекта.
Для выполнения процедуры ЧтениеФайла на рабочем листе создадим кнопку с панели инструментов Формы. И назначим ей макрос ЧтениеФайла.
Введем поясняющий текст кнопки «Чтение файла VAR11.txt и запись на рабочий лист Таблица».
Щелкнем по кнопке – процедура выполнилась, файл прочитан и записан на лист.
kr10. Построение графика зависимости i и R от U
На основе таблицы построим график зависимости Силы тока i и Сопротивления R от Напряжения U.
Процесс построения графика запишем в макрос. Который потом назначим кнопке на рабочем листе.
Начнем с создания кнопки. Возьмем её с панели инструментов Формы.
Кнопке назначим макрос. Этого макроса еще нет. Поэтому нажмем кнопку Записать.
Имя макроса – График. Ок.
Появление панели инструментов Остановить запись говорит о том, что с этого момента все наши действия будут записываться в виде команд на VBA в макрос.