Визуальное программирование и его основные возможности

Тип работы:
Контрольная
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Содержание

  • 1. Теоретическая часть
  • 2. Практическая часть
  • Список использованной литературы
  • Приложения

1. Теоретическая часть

1. а. В чем состоит специфика визуального подхода к программированию, какие языки, среды программирования или среды проектирования поддерживают возможности визуального программирования?

Главное преимущество визуальных языков программирования — то, что они позволяют наглядно представить программные структуры как например, алгоритмы и данные. Это противоречит традиционным текстовым языкам программирования, где такие многомерные структуры закодированы в одномерные строки с помощью достаточно сложного синтаксиса. Визуальные языки убирают этот слой абстракции, позволяя программисту, непосредственно наблюдать и манипулировать сложными программными структурами. Такая прямота представления, характеризуется большей наглядностью.

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

· языки на основе объектов, когда визуальная среда программирования предоставляет графические или символьные элементы, которыми можно манипулировать интерактивным образом в соответствии с некоторыми правилами;

· языки, в интегрированной среде разработки которых на этапе проектирования интерфейса применяются формы, с возможностью настройкой их свойств. Примеры: Delphi и C++ Builder фирмы Borland;

· языки схем, основанные на идее «фигур и линий», где фигуры (прямоугольники, овалы и т. п.) рассматриваются как субъекты и соединяются линиями (стрелками, дугами и др.), которые представляют собой отношения. Пример: UML.

визуальное программирование язык

Визуально-преобразованные языки являются невизуальными языками с наложенным визуальным представлением (например, среда Visual C++ для языка C++). Естественно-визуальные языки имеют неотъемлемое визуальное выражение, для которого нет очевидного текстового эквивалента (например, графический язык G в среде LabVIEW).

Структурной единицей визуального программирования в Delphi и C++Buider является компонент. Компонента представляет собой разновидность объекта, который можно перенести (агрегировать) в приложение из специальной Палитры компонент. Компонента имеет набор свойств, которые можно изменять, не изменяя исходный код программы.

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

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

Программные средства разработки приложений, относящиеся к предыдущему поколению, предлагают интерактивные средства решения типовых задач (мастера в Borland С++ и Wizards или волшебники в Visual С++), которые позволяют в диалоге с программистом создавать и вставлять в программы готовые фрагменты исходного кода.

1. б. Какова объектная модель (иерархия классов VBA), используемая в MS WORD и в MS Excel?

Для того чтобы использовать из сценариев WSH те возможности, которые поддерживают программы Word и Excel, необходимо знать, какие именно объекты предоставляются для внешнего использования этими серверами автоматизации и как объекты соотносятся друг с другом. Хотя объектные модели различных приложений Microsoft Office довольно сложны (например, Word содержит порядка 200 взаимосвязанных друг с другом объектов), они очень похожи друг на друга, причем для практических целей достаточно понять принцип работы с несколькими ключевыми объектами.

Структура объектной модели Word показана на рисунке 1, ее можно вызвать, воспользовавшись встроенной в Word справкой по Visual Basic.

Рисунок 1 — Объектная модель Microsoft Word

На самом верхнем уровне объектной модели Word находится объект Application, который представляет непосредственно само приложение Word и содержит (в качестве свойств) все остальные объекты. Таким образом, объект Application используется для получения доступа к любому другому объекту Word.

Семейство Documents является свойством объекта Application и содержит набор объектов Document, каждый из которых соответствует открытому в Word документу. Класс Documents понадобится нам в сценариях для создания новых документов. Объект Document содержит в качестве своих свойств семейства различных объектов документа; символов (Characters), слов (Words), предложений (Sentences), параграфов (Paragraphs) и т. д. В одном из рассмотренных ниже сценариев, например, нам понадобится работать с семейством закладок в документе (Bookmarks).

Объект Selection позволяет работать с выделенным фрагментом текста (этот фрагмент может быть и пустым). Таким образом, можно сказать, что объект Selection открывает путь в документ, т.к. он предоставляет доступ к выделенному фрагменту документа. В частности, у объекта Selection имеется метод TypeText (Text), с помощью которого можно вставлять текст в документ. Используя свойства этого объекта (которые, в свою очередь, могут являться объектами со своими свойствами), можно управлять параметрами выделенного фрагмента, например, устанавливать нужный размер и гарнитуру шрифта, выравнивать параграфы по центру и т. п.

Объектная модель Excel построена по тому же принципу, что и объектная модель Word. Основным объектом, содержащим все остальные, является Application. Структура объектной модели Word показана на рисунке 2.

Рисунок 2 — Объектная модель Microsoft Excel

Напомним, что отдельные файлы в Excel называются рабочими книгами. Семейство

Workbooksв Excel является аналогом семейства Documents в Word и содержит набор объектов Workbook (аналог объекта Document в Word), каждый из которых соответствует открытой в Word рабочей книге. Новая рабочая книга создается с помощью метода Add () объекта Workbooks.

Для доступа к ячейкам активного рабочего листа Excel используется свойство Cells объекта Application. Для получения или изменения значения отдельной ячейки применяется конструкция Cells (row, column). Value, где row и column являются соответственно номерами строки и столбца, на пересечении которых находится данная ячейка.

В Excel, как и в Word, имеется объект Selection, позволяющий работать с выделенным фрагментом электронной таблицы. Самым простым способом выделить диапазон ячеек активного рабочего листа является использование метода Select () объекта Range. Например, выражение Range («A1: C1»). Select () позволяет выделить три смежные ячейки: «A1», «B1» и «C1».

Для того чтобы понять, какой именно объект Word или Excel нужно использовать для решения той или иной задачи, часто проще всего бывает проделать в соответствующем приложении необходимые манипуляции вручную, включив предварительно режим записи макроса. В результате получим текст макроса на языке VBA (Visual Basic for Applications), из которого будет ясно, какие методы и с какими параметрами нужно вызывать и какие значения нужно присваивать свойствам объектов.

1. в. Как обрабатываются и программно перехватываются различные ошибки исполнения программы на языке VBA для приложений MS Office? (перечислить команды, приемы VBA для обработки ошибок — например, команда «on error goto.» — и ей подобное)

Ошибки возникают на различных стадиях проектирования приложения:

— в процессе написания текста процедуры (синтаксические и семантические ошибки). Например, неправильные имена ключевых слов VBA, некорректные имена переменных, использование необъявленных объектов и их свойств и т. п.

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

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

Во-первых при написании текста программ интерпретатор помогает исключить большинство синтаксических ошибок, выделяя строки с синтаксически неправильный тестом красным цветом. Строка, выделенная красным цветом, должна быть проанализирована и исправлена. Например: Ошибочное выражение:

Sheets («Лист»). Cells (1,2), value

Будет выделено красным цветом до тех пор, пока мы неисправим запятую на очку между знаком) и символом v. Потому, что разделителем свойства объекта в Visual Basic является символ точка, а не запятая.

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

В третьих. При разработке алгоритма макроса (или процедуры), не следует часто использовать оператор GOTO < метка строки>. Это приводит к запутанным логическим схемам, которые затем сложно проконтролировать.

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

Вызов принудительных остановов (создание «точек прерывания») с помощью клавиши F9. Строка, на которой установлена «точка прерывания» выделяется коричневым цветом. Снятие принудительного останова осуществляется повторным нажатием на этой строке клавиши F9.

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

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

Вывести значения переменных в окно непосредственных действий можно используя команду DEBUG. PRINT < список переменных>. В этом случае результаты будут выводиться в это окно без остановки выполнения программы.

Дополнительно удобно выводить промежуточные значения переменных в момент выполнения процедур, используя для этого команду MSGBOX < текстовая переменная>. Текстовая переменная обычно формируется, включая комментарии поясняющие значения переменных. Например, нам необходимо вывести номер строки таблицы (переменная NstrTab) и номер столбца (переменная NcolTab), над которыми идет обработка. В этом случае можно воспользоваться следующей программой:

tt = «Строка=» & NstrTab & Chr (10)

tt = «Столбец=» & NcolTab

MsgBox tt

Мощным средством отладки в режиме интерпретатора является режим пошагового прохода по строкам процедуры. Этот режим задается нажатием клавиши F8.

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

Используя комбинацию клавиши F8 с другими клавишами (например, Shift), можно пропускать (т.е. выполнять без остановки) некоторые блоки строк в процедуре. Высокоэффективный путь отладки программы состоит в том, чтобы пользователь написал такой собственный драйвер ошибок, который может перехватывать любые системные ошибки. Возникающие во время исполнения программы.

Драйвер ошибок — это такая программа, которая включается в текст основной программы и реагирует на возникновение ошибки, перехватывает управление и выдает соответствующее сообщение.

Перехват системных ошибок производится инструкцией

ON ERROR GOTO < метка строки>

Метка строки — это комбинация алфавитноцифровых символов без пробелов, заканчивающаяся знаком «двоеточие», которая устанавливается в начале строки, на которую следует переходить в случае возникновения ошибки. А сообщения об ошибке можно получить с помощью свойств объекта Err.

Number

Возвращает код ошибки

Source

Имя текущего проекта

Description

Возвращает строковое выражение, содержащее текст сообщения

HelpFile

Полное имя файла справки

HelpContext

Контекстный идентификатор файла справки.

LastDLLError

Содержит системный код ошибки для последнего вызова библиотеки динамической компоновки (DLL)

Пример организации перехвата и обработки ошибок в процедурах

Sub ТЕСТ1 ()

`- - Включение перехвата ошибок — --

On Error Goto МЕТКА1

< блок операторов процедуры>

`- - оператор досрочного выхода из процедуры —

`- - Драйвер обработки ошибок — ---------

МЕТКА1:

tt ="Ошибка =" & Err. Description & chr (10)

tt = «Продолжить расчет (Да/Нет) =»

Rep=Msgbox (tt, 308,"Системная ошибка")

If Rep=vbNo then Exit sub

Resume Next

Exit sub

End Sub

1. г. Классы-коллекции VBA для работы с выделенными областями и диапазонами — range и selection — привести синтаксис различных их конструкций и примеры их использования — с расшифровкой назначения той или иной конструкции, команды, примера

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

Пожалуй, самый естественный способ получения ссылки на объект Range — это метод Range. Имеются два вида синтаксиса для применения этого метода. Первый использует один аргумент: объект. Range (интервал), где: объект — это объект типа Worksheet или Range, к которому применяется метод Range. Этот объект может быть опущен, и тогда предполагается, что метод Range применяется к активному рабочему листу — объекту ActiveSheet; Range («A1: B10»). ClearContents

Строка, описывающая диапазон, может содержать символы $, задающие абсолютный стиль ссылок, но эти символы игнорируются и никак не влияют на определение диапазона. Если метод применяется к объекту типа Worksheet, то получается абсолютная ссылка на указанный диапазон разделитель списка — запятая «,»). Например, следующий оператор ссылается на диапазон A1: B10 активного рабочего листа и очищает его рабочего листа; если же метод применяется к объекту типа Range, то ссылка считается относительной. Например, если текущая активная ячейка — это ячейка B3, то оператор Selection. Range («B1»)

возвращает ячейку C3, поскольку ссылка B1 считается относительной для объекта Range (активной ячейки B3), возвращаемого свойством Selection. В то же время оператор ActiveSheet. Range («B1») всегда возвращает ячейку B1.

Если вы используете имена для диапазонов ячеек рабочего листа, то они также могут использоваться в качестве ссылки на диапазон, например, оператор Range («Условия»). Copy — копирует поименованный диапазон «Условия» в буфер обмена.

Другой синтаксис для метода Range использует два аргумента: объект. Range (ячейка1, ячейка2)

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

Объекты Selection также обладают свойством Range. Это значительно упрощает использование свойств и методов, принадлежащих объектам Range существующих выделенных областей. Приведенный ниже пример присваивает диапазон выделенной области переменной, перемещает выделенную область, после чего преобразует текст прописными буквами:

Set deRange = Selection. Range

Selection. Move Unit: = wdParagraph, Count: = 3

deRange-Case = wdLowerCase

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

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

Объекты Range и Selection столь же многообразны по своей структуре, как и объект Document. И даже большинство свойств у этих трех объектов одни и те же. Эти три объекта являются схожими. Это понятно, так как большинство частей документа: предложения, абзацы, разделы, таблицы, рисунки, комментарии, ссылки и многое другое — может составлять любую подобласть документа, в том числе и выделенную подобласть. Значит, большинство ранее описанных частей документа являются и частями (свойствами) объектов Range и Selection. Это приятно — ведь с большинством свойств этих объектов мы уже знакомы!

Объект Range напоминает матрешку: в каждую область вложена область поменьше.

Объекты Range и Selection позволяют выполнять основные операции над текстом: «выделить», «добавить», «заменить», «удалить». У наших объектов большой набор методов, позволяющих реализовать эти операции.

1. д. Создание и применение пользовательских функций в EXCEL (не встроенных, а программируемых)

Даже когда кажется, что встроенные инструменты анализа данных Excel способны выполнить все необходимые действия, работа с VBA может оказаться более удобной. Использование VBA позволяет создавать пользовательские функции для рабочих листов, существенно превосходящие формулы, которые могут записываться непосредственно в ячейке.

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

Пользовательские функции Excel — это просто обычные процедуры VBA-функций. Если сказать коротко, процедура функции начинается с декларации ее имени и заканчивается оператором End Function. Иногда внутри может потребоваться оператор, присваивающий значение имени функции, данное значение как раз и возвращает функция. В простейшем примере, приведенном здесь, именно это и демонстрируется:

FunctiDn MemoryAvailable ()

M-smoryAvailable = Application. MemoryFree

End Fu. icticn

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

Function CheckForvalue (aRange, Value)

For Each objCell In aRange

CheckForValue = False 'по умолчанию возвращается значение

False

If objCell. Value = Value Then

CheckForValue = True

Exit For

End If

Next objCell

EndFur. Ction

Данная функция проверяет диапазон ячеек на наличие определенного значения. Если значение есть где-либо в диапазоне, функция возвращает значение True, в противном случае возвращается значение F a l s e. Перед инициированием функции необходимо обеспечить ее двумя аргументами — диапазоном и искомым значением.

Профессиональное написание функций

Не стоит отказываться от возможности написания функции таким образом, чтобы выдаваемый се результат был именно таким, как вам того хотелось бы. Зачем поручать формуле выполнять то, что можно сделать в самой функции? Приведенная модификация функции CheckForValue вместо непонятных значений True и F a l s e возвращает строку поясняющего текста:

Function CheckForVaiue2 (aRange, Value)

For Each objCell In aRange

CheckForValue2 = «искомое значение» 6 Value & __ «не найдено»

I;: objCell. Value = value Then

CheckForValue2 = «искомое значение» & Value & _ «находится

в ячейке" & objCell. Address

Exit For

End If

Next objCell

End Function

Если модифицированной функции удается найти искомое значение где-либо внутри диапазона, она возвращает строчку вроде Искомое значение 3, 57 находится Б ячейке SFS83; в противном случае возвращается строчка Искомое значение 3,57 не найдено.

2. Практическая часть

А) Создать программу-макрос на языке VBA для [MS WORD], которая с помощью управляющих кнопок на форме производит такие событийные процедуры:

2. а.1. Открывает для работы документ (имя документа не должно задаваться «жестко», т. е. программно — имя документа должен иметь возможность выбрать пользователь вашей программы): — используйте dialogs.

Для демонстрации работы программы откроем файл «Задание 1. doc», который содержит пользовательскую форму и модуль с макросами.

В Word 2003 для вызова пользовательской формы выберем в меню Сервис > Макрос > Макросы (в Word 2007−2010 вкладка Вид > Макросы> Макросы) и в открывшемся окне выберем макрос Open_UserForm1. Нажмем кнопку Выполнить (рисунок 3). (Для просмотра кода программы можно нажать Alt+F11 — откроется редактор VBA.)

Рисунок 3 — Запуск макроса

На экране появится форма с шестью управляющими кнопками (рисунок 4).

Рисунок 4 — Пользовательская форма

При нажатии на кнопку «Открыть файл» откроется диалоговое окно «Открытие документа». Открывается выбранный документ.

Код процедуры:

Private Sub cmdOpenFile_Click ()

Call openFile

End Sub

Sub openFile ()

'закрываем пользовательскую форму

Unload UserForm1

'открытие файла с помощью диалогового окна

With Dialogs (wdDialogFileOpen)

Name = «*. doc*»

Show

End With

'снова открываем форму

UserForm1. Show

End Sub

2. а.2. В документе программно производится выделение какого-либо куска текста и копирование его в буфер.

При нажатии на кнопку «Копировать в буфер» будет помещен в буфер 1 абзац активного документа.

Код процедуры:

Private Sub cmdCopyClipboard_Click ()

Call TextCopyClipboard

End Sub

Sub TextCopyClipboard ()

'копируем 1 абзац

ActiveDocument. Paragraphs (1). Range. Copy

End Sub

2. а.3. По нажатию управляющей кнопки создается новый файл и в него вставляется кусок из буфера.

При нажатии на кнопку «Новый файл» создастся новый документ, в который будет помещено содержимое буфера.

Код процедуры:

Private Sub cmdNewDocument_Click ()

Call newDoc

End Sub

Sub newDoc ()

'закрываем пользовательскую форму

Unload UserForm1

'создаем новый документ и вставляем в него данные из буфера

Documents. Add

ActiveDocument. Range. Paste

'снова открываем форму

UserForm1. Show

End Sub

2. а.4. По «щелчку» еще одной управляющей кнопки на форме производится нумерация страниц текущего документа, добавление текущей даты в конце и сохранение на диске под именем «МояКопии. dос»

При нажатии на кнопку «Пронумеровать страницы» производится нумерация страниц текущего документа, добавление текущей даты в конце и сохранение на диске под именем «МояКопия. dос».

Код процедуры:

Private Sub cmdNumerPage_Click ()

'нумеруем страницы

ActiveDocument. Sections (1). Footers (1). PageNumbers. Add PageNumberAlignment: = _

wdAlignPageNumberRight, FirstPage: =True

'переходим в конец документа

Selection. EndKey wdStory

'вставляем новый абзац

Selection. TypeParagraph

'добавляем текущую дату

Selection. Text = Date

'сохраняем активный документ под именем «МояКопия. doc»

ActiveDocument. SaveAs FileName: ="МояКопия. doc"

End Sub

2. а.5. Еще одна кнопка на форме должна выводить активный (текущий) документ для предварительного просмотра на экран.

При нажатии на кнопку «Просмотр» будет осуществлен вывод активного (текущиго) документа для предварительного просмотра на экран.

Код процедуры:

Private Sub cmdView_Click ()

'выводим активный документ для предварительного просмотра на экран

ActiveDocument. PrintPreview

End Sub

2. а.6. По кнопке «выход» все открытые документы сохраняются и работа макроса (программы) завершается.

При нажатии на кнопку «Выход» все открытые документы сохраняются и работа макроса (программы) завершается.

Код процедуры:

Private Sub cmdExit_Click ()

Application. Quit SaveChanges: =wdSaveChanges

End Sub

Б) Создать программу (макрос) для [MS EXCEL]: макрос должен с помощью формы позволять производить следующие манипуляции с электронными книгами:

2. б.1. Открытие существующей электронной книги с одновременной выдачей списка ее листов на форму (в объект типа ListBox или ComboBox) и возможностью перехода с одного листа электронной книги — на другой лист — с помощью выбора элементов этого списка (программируете событие onCange для списка). При открытии книги «Задание 2. xls» на экране появляется пользовательская форма (рисунок 6).

Рисунок 6 — Пользовательская форма

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

Код процедуры:

Private Sub cmdOpenFile_Click ()

'открытие файла с помощью диалогового окна

FName = Application. GetOpenFilename («Excel Files (*. xlsm; *. xls), *xlsm; *. xls»)

If FName = False Then End ' если была нажата кнопка Отмена - выходим из процедуры

открываем выбранную книгу

Workbooks. Open FName, 1

'очищаем поле со списком

ComboBox1. Clear

'добавляем в поле со списком ComboBox1 наименования всех листов открытой книги

For i = 1 To ActiveWorkbook. Worksheets. Count

ComboBox1. AddItem Worksheets (i). Name

Next i

End Sub

При выборе в ComboBox какого-то элемента, лист с выбранным названием становится активным.

Код процедуры:

Private Sub ComboBox1_Change ()

'если в поле со списком был выбран какой то лист - открываем его

If ComboBox1. ListIndex >= 0 Then

Worksheets (ComboBox1. Value). Activate

End If

End Sub

2. б.2. Создание новой электронной книги. Предусмотреть также на форме кнопку для сохранения всех открытых файлов или активного документа в любой момент.

При нажатии на кнопку «Создать новый документ» появляется новая книга.

Код процедуры:

Private Sub cmdNewDoc_Click ()

Workbooks. Add

End Sub

2. б.3. Заполнение 3-го листа активной электронной книги данными, вводимыми с формы пользователем вашей программы.

Для заполнение 3-го листа активной электронной книги данными, необходимо на форме заполнить поля «Фамилия» и «Дата рождения» и нажать кнопку «Добавить».

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

Код процедуры:

Private Sub cmdAdd_Click ()

'открываем 3 лист активной книги

ActiveWorkbook. Worksheets (3). Activate

'определяем последнюю заполненную строку в текущем диапазоне

last_row = Cells (1, 1). CurrentRegion. Rows. Count

Cells (1, 1) = «ФИО»

Cells (1,2) = «Дата»

'записываем в первую пустую строку данные из текстовых полей, предварительно проверив правильность ввода

If last_row >= 1 Then

If TextBox1. Text = «» Or IsDate (TextBox2) = False Then MsgBox «Неверные данные, повторите ввод»: Exit Sub

Cells (last_row + 1, 1) = TextBox1. Text

Cells (last_row + 1,2) = Format (TextBox2. Text, «dd. mm. yyyy»)

End If

'выравниваем ширину столбцов по содержимому

Columns («A: B»). AutoFit

End Sub

2. б.4. На 2-м листе электронной таблицы предусмотреть вставку и выполнение функции, которая не является стандартной функцией Excel, а описана вами в пользовательской процедуре function.

При нажатии на кнопку «Пользовательская функция» пользователю будет предложено ввести предложение. Введенное предложение будет помещено в 1 ячейку 2-го листа электронной таблицы. Рядом же будет помещен результат пользовательской функции, с помощью которой заданное предложение будет разбито на отдельные слова.

К примеру, дана таблица, один из столбцов которой содержит ФИО. А необходимо получить 3 столбца (1 столбец — фамилии, 2 и 3 соответственно — имена и отчества). С помощью стандартных процедур это сделать довольно сложно.

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

Входными аргументами функции будет «предложение» и «номер слова», которое необходимо получить из этого предложения.

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

Код процедуры:

Private Sub cmdFunction_Click ()

Worksheets (2). Activate

fio = InputBox («Введите предложение», «Ввод данных», «Самохин Федор Петрович»)

Worksheets (2). Cells (1, 1) = fio

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

n = Количество_слов_в_предложении (fio)

For i = 1 To n

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

Worksheets (2). Cells (1, 1 + i) = Слово_из_предложения (fio, i)

Next i

End Sub

Function Слово_из_предложения (Предложение, Номер_слова)

sss = Split (Предложение)

Слово_из_предложения = sss (Номер_слова — 1)

End Function

Function Количество_слов_в_предложении (Предложение) As Integer

If Предложение < > «» Then

sss = Split (Предложение)

Количество_слов_в_предложении = UBound (sss) + 1

End If

End Function

При вводе «Самохин Федор Петрович» (рисунок 7) результат работы функции показан на рисунке 8. То есть функция запускалась 3 раза, в 1 раз она вернула 1 слово из введенного предложения, второй раз — второе слово, третий раз — третье. Таким образом мы разбили введенное предложение по словам.

Рисунок 7 — Окно ввода

Рисунок 8 — Результат работы функции

2. б.5. Предусмотреть на форме кнопку, которая выводит на экран (на форму) электронную таблицу для предварительного просмотра перед печатью.

При нажатии на кнопку «Просмотр» произойдет вывод на экран электронной таблицы для предварительного просмотра перед печатью (рисунок 9).

Рисунок 9 — Предварительный просмотр

Код процедуры:

Private Sub cmdView_Click ()

Me. Hide

ActiveWindow. SelectedSheets. PrintPreview

UserForm1. Show

End Sub

2. б.6. Предусмотреть на форме кнопку, позволяющую настроить параметры страницы перед распечаткой (используйте для этого диалоги (класс Dialogs) MS Excel).

При нажатии на кнопку «Настройка параметров» появится окно «Параметры страницы».

Код процедуры:

Private Sub cmdParametrs_Click ()

Application. Dialogs (xlDialogPageSetup). Show

End Sub

При этом предусмотрено сохранение всех открытых файлов в любой момент. Для этого нужно нажать на кнопку «Сохранить все» в правом верхнем углу формы.

Код процедуры:

Private Sub cmdSaveAll_Click ()

'сохраняем все открытые книги

For Each w In Application. Workbooks

w. Save

Next w

End Sub

2. б.7. Предусмотреть на форме кнопку «Выход» с сохранением всех сделанных изменениях в книгах. xls

При нажатии на кнопку «Выход» программа будет закрыта, все сделанные изменений будут сохранены.

Код процедуры:

Private Sub cmdExit_Click ()

For Each w In Application. Workbooks

w. Save

Next w

Application. Quit

End Sub

Список использованной литературы

1. А. Васильев, А. Андреев. VBA в Office 2000. Учебный курс — С-Пб.: «Питер», 2001

2. В. И. Король. Visual Basic 6. 0, Visual Basic for Applications 6.0. Язык программирования. Справочник с примерами. — М.: Издательство КУДИЦ, 2000

3. В. А. Биллиг. «VBA в Office 2000. Офисное программирование» — М.: Издательско-торговый дом «Русская Редакция», 1999

4. Руководство программиста по Visual Basic для Microsoft Office 97 /Пер. с англ. — М.: Издательский отдел «Русская Редакция» TOO «Channel Trading Ltd. «, 1997

5. В. А. Биллиг, М. И. Дехтярь. VBA и Office 97. Офисное программирование — М.: Издательский отдел «Русская Редакция» ТОО «Channel Trading Ltd.» 1998

6. Кен Гетц, Майк Гилберт. Программирование на Visual Basic 6 и VBA. Руководство разработчика: Пер. с англ. — К.: Издательская группа BHV, 2001

Приложения

Для демонстрации работы программы откроем файл «Задание 1. doc», который содержит пользовательскую форму и модуль с макросами.

В Word 2003 для вызова пользовательской формы выберем в меню Сервис > Макрос > Макросы (в Word 2007−2010 вкладка Вид > Макросы> Макросы) и в открывшемся окне выберем макрос Open_UserForm1. Нажмем кнопку Выполнить. (Для просмотра кода программы можно нажать Alt+F11 — откроется редактор VBA.)

При нажатии на 1 кнопку («Открыть файл») откроется диалоговое окно «Открытие документа». Открывается выбранный документ.

Код процедуры:

Private Sub cmdOpenFile_Click ()

Call openFile

End Sub

Sub openFile ()

'закрываем пользовательскую форму

Unload UserForm1

'открытие файла с помощью диалогового окна

With Dialogs (wdDialogFileOpen)

Name = «*. doc*»

Show

End With

'снова открываем форму

UserForm1. Show

End Sub

При нажатии на 2 кнопку («Копировать в буфер») будет помещен в буфер 1 абзац активного документа.

Код процедуры:

Private Sub cmdCopyClipboard_Click ()

Call TextCopyClipboard

End Sub

Sub TextCopyClipboard ()

'копируем 1 абзац

ActiveDocument. Paragraphs (1). Range. Copy

End Sub

При нажатии на 3 кнопку («Новый файл») создастся новый документ, в который будет помещено содержимое буфера.

Код процедуры:

Private Sub cmdNewDocument_Click ()

Call newDoc

End Sub

Sub newDoc ()

'закрываем пользовательскую форму

Unload UserForm1

'создаем новый документ и вставляем в него данные из буфера

Documents. Add

ActiveDocument. Range. Paste

'снова открываем форму

UserForm1. Show

End Sub

При нажатии на 4 кнопку («Пронумеровать страницы») производится нумерация страниц текущего документа, добавление текущей даты в конце и сохранение на диске под именем «МояКопия. dос».

Код процедуры:

Private Sub cmdNumerPage_Click ()

'нумеруем страницы

ActiveDocument. Sections (1). Footers (1). PageNumbers. Add PageNumberAlignment: = _

wdAlignPageNumberRight, FirstPage: =True

'переходим в конец документа

Selection. EndKey wdStory

'вставляем новый абзац

Selection. TypeParagraph

'добавляем текущую дату

Selection. Text = Date

'сохраняем активный документ под именем «МояКопия. doc»

ActiveDocument. SaveAs FileName: ="МояКопия. doc"

End Sub

При нажатии на 5 кнопку («Просмотр») будет осуществлен вывод активного (текущиго) документа для предварительного просмотра на экран.

Код процедуры:

Private Sub cmdView_Click ()

'выводим активный документ для предварительного просмотра на экран

ActiveDocument. PrintPreview

End Sub

При нажатии на 6 кнопку («Выход») все открытые документы сохраняются и работа макроса (программы) завершается.

Код процедуры:

Private Sub cmdExit_Click ()

Application. Quit SaveChanges: =wdSaveChanges

End Sub

При открытии книги «Задание 2. xls» на экране появляется пользовательская форма.

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

Код процедуры:

Private Sub cmdOpenFile_Click ()

'открытие файла с помощью диалогового окна

FName = Application. GetOpenFilename («Excel Files (*. xlsm; *. xls), *xlsm; *. xls»)

If FName = False Then End ' если была нажата кнопка Отмена - выходим из процедуры

' открываем выбранную книгу

Workbooks. Open FName, 1

'очищаем поле со списком

ComboBox1. Clear

'добавляем в поле со списком ComboBox1 наименования всех листов открытой книги

For i = 1 To ActiveWorkbook. Worksheets. Count

ComboBox1. AddItem Worksheets (i). Name

Next i

End Sub

При выборе в ComboBox какого-то элемента, лист с выбранным названием становится активным.

Код процедуры:

Private Sub ComboBox1_Change ()

'если в поле со списком был выбран какой то лист — открываем его

If ComboBox1. ListIndex >= 0 Then

Worksheets (ComboBox1. Value). Activate

End If

End Sub

При нажатии на кнопку «Создать новый документ» появляется новая книга.

Код процедуры:

Private Sub cmdNewDoc_Click ()

Workbooks. Add

End Sub

Для заполнение 3-го листа активной электронной книги данными, необходимо на форме заполнить поля «Фамилия» и «Дата рождения» и нажать кнопку «Добавить».

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

Код процедуры:

Private Sub cmdAdd_Click ()

'открываем 3 лист активной книги

ActiveWorkbook. Worksheets (3). Activate

'определяем последнюю заполненную строку в текущем диапазоне

last_row = Cells (1, 1). CurrentRegion. Rows. Count

Cells (1, 1) = «ФИО»

Cells (1,2) = «Дата»

'записываем в первую пустую строку данные из текстовых полей, предварительно проверив правильность ввода

If last_row >= 1 Then

If TextBox1. Text = «» Or IsDate (TextBox2) = False Then MsgBox «Неверные данные, повторите ввод»: Exit Sub

Cells (last_row + 1, 1) = TextBox1. Text

Cells (last_row + 1,2) = Format (TextBox2. Text, «dd. mm. yyyy»)

End If

'выравниваем ширину столбцов по содержимому

Columns («A: B»). AutoFit

End Sub

При нажатии на кнопку «Пользовательская функция» пользователю будет предложено ввести предложение. Введенное предложение будет помещено в 1 ячейку 2-го листа электронной таблицы. Рядом же будет помещен результат пользовательской функции, с помощью которой заданное предложение будет разбито на отдельные слова.

К примеру, дана таблица, один из столбцов которой содержит ФИО. А необходимо получить 3 столбца (1 столбец — фамилии, 2 и 3 соответственно — имена и отчества). С помощью стандартных процедур это сделать довольно сложно.

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

Входными аргументами функции будет «предложение» и «номер слова», которое необходимо получить из этого предложения.

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

Код процедуры:

Private Sub cmdFunction_Click ()

Worksheets (2). Activate

fio = InputBox («Введите предложение», «Ввод данных», «Самохин Федор Петрович»)

Worksheets (2). Cells (1, 1) = fio

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

n = Количество_слов_в_предложении (fio)

For i = 1 To n

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

Worksheets (2). Cells (1, 1 + i) = Слово_из_предложения (fio, i)

Next i

End Sub

Function Слово_из_предложения (Предложение, Номер_слова)

sss = Split (Предложение)

Слово_из_предложения = sss (Номер_слова — 1)

End Function

Function Количество_слов_в_предложении (Предложение) As Integer

If Предложение < > «» Then

sss = Split (Предложение)

Количество_слов_в_предложении = UBound (sss) + 1

End If

End Function

При вводе «Самохин Федор Петрович» результат работы функции показан на рисунке 5. Т. е. функция запускалась 3 раза, в 1 раз она вернула 1 слово из введенного предложения, второй раз — второе слово, третий раз — третье. Т.о. мы разбили введенное предложение по словам.

При нажатии на кнопку «Просмотр» произойдет вывод на экран электронной таблицы для предварительного просмотра перед печатью.

Код процедуры:

Private Sub cmdView_Click ()

Me. Hide

ActiveWindow. SelectedSheets. PrintPreview

UserForm1. Show

End Sub

При нажатии на кнопку «Настройка параметров» появится окно «Параметры страницы».

Код процедуры:

Private Sub cmdParametrs_Click ()

Application. Dialogs (xlDialogPageSetup). Show

End Sub

При этом предусмотрено сохранение всех открытых файлов в любой момент. Для этого нужно нажать на кнопку «Сохранить все» в правом верхнем углу формы.

Код процедуры:

Private Sub cmdSaveAll_Click ()

'сохраняем все открытые книги

For Each w In Application. Workbooks

w. Save

Next w

End Sub

При нажатии на кнопку «Выход» программа будет закрыта, все сделанные изменений будут сохранены.

Код процедуры:

Private Sub cmdExit_Click ()

For Each w In Application. Workbooks

w. Save

Next w

Application. Quit

End Sub

ПоказатьСвернуть
Заполнить форму текущей работой