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

1. Цель работы:

1.1. изучение возможностей построения диаграмм средствами VBA.

1.2. Изучение принципов создания различных приложений.

2. Приборы и оборудование:

2.1. Методические указания.

2.2. ПЭВМ типа IBM PC/XT.

2.3. MS Word.

2.4. Visual Basic for Application.

3. Порядок выполнения работы:

3.1. Изучить основные теоретические сведения (Приложение А).

3.2. Задание 1.В диалоговое окно «Построение графика» (см. приложение А. рисунок 1) вводятся начальное, конечное значения аргумента и его шаг изменения. Уравнение графика жестко регламентировано. Программа сама переведет аргумент в ссылку на ячейку. После табуляции введенной функции программой и построения поверхности на рабочем листе этот график также отображается в объекте управления image, расположенном в диалоговом окне Построение графика (см. рисунок 1, 2).

3.3. Задание 2.В диалоговое окно «Построение графика» (см. рисунок 3) вводятся начальное, конечное значения аргумента и его шаг изменения. Уравнение графика вводится в текстовое окно. Программа сама переведет аргумент в ссылку на ячейку. Предусматривается выбор типа графика при построении графика функции. После табуляции введенной функции программой и построения поверхности на рабочем листе этот график также отображается в объекте управления image, расположенном в диалоговом окне Построение графика (см. рисунок 3, 4, 5).

Рисунок 1 – Построение графика в диалоговом окне при выборе у=cos(x)

Рисунок 2 – Построение графика в диалоговом окне при выборе у=sin(x)

Рисунок 3 – Построение графика в диалоговом окне при выборе линейного типа

Рисунок 4 – Построение графика в диалоговом окне при выборе гистограммы

Рисунок 5 – Построение графика в диалоговом окне при выборе круговой диаграммы

3.4. Задание 3.Напишите программу переноса данных из таблицы Microsoft Excel, созданной в лабораторной работе №7, в автоматически создаваемый документ Microsoft Word, пример оформления формы:

Рисунок 6 – Разработанная форма в рабочем состоянии.

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

3.6. Добавьте комментарии. Текст и результат выполнения программы занести в отчёт.

3.7. Сформулируйте выводы по проделанной работе.

4. Содержание отчёта:

4.1. Тема работы.

4.2. Цель работы.

4.3. Приборы и оборудование.

4.4. Порядок выполнения работы.

4.5. Выводы.

4.6. Контрольные вопросы.

5. Контрольные вопросы:

5.1.Как считать заголовочные данные и вывести их в ячейки электронной таблицы?

5.2.Как выполнить автозаполнение с текущей строки таблицы на следующую строку?

5.3. Язык макрокоманд VBA. Работа с диаграммами.

5.4. Как заменить в введенной формуле аргумента х на ссылку $A1?

5.5. Как создать стандартное приложение Word?

5.6. Как создать объект Word?

5.7. Как осуществить активацию приложения?

5.8. Как осуществить добавление приложения и перенести данные в приложении?

5.9. Как VBA осуществляется передача данных из Excel в текстовый документ?


Приложение А

Теоретические сведения

Построение диаграмм

Диаграммы в Excel

Диаграммы можно размещать на рабочем листе. Для этого используется коллекция chartobjects. Ее элементы – объекты класса chartobject – являются контейнерами, содержащими объект Chart, задающий непосредственно диаграмму.

Методы объекта Chart

Рассмотрим основные методы, определяющие новое поведение объекта Chart:

SubChartWizard([Source], [Gallery], [Format], [PlotBy], [CategoryLabels], [SeriesLabels], [HasLegend], [Title], [CategoryTitle], [ValueTitle], [Extra-Title])

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

1) Source – объект Range, содержащий исходные данные для построения новой диаграммы. Если параметр опущен, то метод позволяет отредактировать существующую диаграмму – либо выделенную диаграмму рабочего листа, либо диаграмму активного листа диаграмм.

2) Gallery – задает тип диаграммы и может быть одной из следующих констант: xlArea, xlBar, xlColumn, xlLine, xlPie, xlRadar, xlXY-Scatter, xlCombination, xl3DArea, xl3DBar, xl3DColumn, xl3DLine, xl3DPie, xl3DSurface, xlDoughnut, или xlDefaultAutoFormat.

3) Format – задает формат для данного типа диаграммы. Каждому типу диаграммы соответствует некоторое число возможных форматов. Параметр задает номер формата, по умолчанию выбирается первый формат данного типа.

4) PlotBy – соответствует терминальному свойству PlotBy.

5) CategoryLabels и SeriesLabels – целые, указывающие число строк или столбцов с метками категорий и рядов данных в области, заданной параметром Source. Указывать эти числа нужно на единицу меньше фактического значения.

6) Остальные параметры позволяют добавить легенду, задать название диаграммы и ее осей – они совпадают с соответствующими терминальными свойствами.

Sub SetSourceData(source as range, [plotby]). Устанавливает источник данных диаграммы. Второй параметр соответствует терминальному свойству plotby.

SubApplyCustomType(ChartTypeAsXlChartType, [typename]). Метод позволяет модифицировать диаграмму, применив к ней новый тип – стандартный или настраиваемый. Если этот тип стандартный, то тогда первый параметр полностью его определяет. Его возможные значения совпадают со значениями соответствующего терминального свойства charttype. Если же тип настраиваемый, то первый параметр должен иметь одно из следующих значений: xlbuiltin, xluserdefined или xlanygallery. В этом случае второй параметр задает имя типа диаграммы.

Function Export(filename as string, [filtername], [interactive]) as boolean позволяет экспортировать диаграмму, преобразуя ее в графический формат. Первый параметр задает имя файла, в который будет записана диаграмма в графическом формате, второй – задает имя графического фильтра в том виде, как оно записано в системном регистре. Булев параметр interactive должен иметь значение true, если мы хотим вызвать диалоговое окно в процессе фильтрации. Функция export возвращает значение true в случае успешного завершения работы.

Sub GetChartElement(x as long, y as long, elementid as long, argl as long, arg2 as long). Представьте себе, что пользователь щелкнул кнопку мыши где-то над диаграммой. Обработав это событие, можно получить координаты курсора мыши – x и y. Если теперь вызвать метод getchartelement с этими координатами, то он вернет значение параметра elementid – идентификатор элемента диаграммы и значения двух параметров, связанных с этим элементом. Конечно, параметры зависят от типа того элемента, чьи координаты x и y заданы.

Function Location(where as xlchartlocation, [name]) as

Chart. Передвигает диаграмму в новое местоположение. Параметр Where имеет следующие значения: xlLocationAsNewSheet, xlLocationAsObject или xlLocationAutomatic.

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

Создание VBA-программы. Пример. По введенным в диалоговое окно «Построение графика» (см. рисунок 1) начальным, конечным значениям аргументов и их шагам изменения строится график. Уравнение графика также вводится в программу из диалогового окна. Уравнение должно быть составлено в соответствии с правилами, по которым строятся функции рабочего листа, но в качестве аргументов в нем следует использовать х вместо ссылки на ячейку. Программа сама переведет аргумент в ссылку на ячейку. После табуляции введенной функции программой и построения поверхности на рабочем листе (см. рисунок 2) этот график также отображается в объекте управления Image, расположенном в диалоговом окне Построение графика (см. рисунок 1).

Технология выполнения

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

Рисунок 1 – Диалоговое окно «Построение графика» в рабочем состоянии (пример)

Рисунок 2 – Результат построения графика на рабочем листе (пример)

UserForm_Initialize

1. Активизирует диалоговое окно.

2. Назначает клавише <Esc> функцию кнопки Отмена, а клавише <Enter> – построение.

3. Устанавливает, чтобы отображаемая картинка графика в диалоговом окне помещалась целиком и пропорционально в пределах элемента управления Image, а также чтобы левый верхний угол рисунка совпадал с левым верхним углом элемента управления Image.

Нажатие кнопки Построение запускает на выполнение процедуру CommandButton1__C1ick

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

2. Проверяет согласованность вводимых данных. В случае ошибки отображается соответствующее сообщение (см. рисунок 3).

3. Преобразует формулу, введенную в поле Уравнение графика, в формулу рабочего листа.

4. Проверяет корректность введенной формулы. В случае ошибки отображается соответствующее сообщение (см. рисунок 4).

5. Используя метод DataSeries, начиная с ячейки А2, строит вниз по столбцу арифметическую прогрессию, являющуюся результатом табуляции аргумента х уравнения графика с указанными шагами (рисунок из файла graph.jpg в элементе управления Image1).

Рисунок 3 – Пример сообщения о несогласованности данных

Рисунок 4 – Сообщение о некорректном вводе формулы

Нажатие кнопки Отмена запускает на выполнение процедуру CommandButton2_C1ick

Закрывает диалоговое окно.

Рассмотрим листинг данного приложения.

Private Sub CommandButton1_Click()

' Процедура табуляции функции

Dim х_нз As Double

Dim х_пз As Double

Dim х_шаг As Double

Dim УрГрафика As String

Dim nx As Integer

'nx – число протабулированных значений аргумента х

Dim n As Integer

Dim i As Integer

'n,i – вспомогательные целые переменные

'Проверка корректности ввода данных

If IsNumeric(TextBox2.Text) = False Then

MsgBox «Ошибка в начальном значении х», vbInformation, «График»

TextBox2.SetFocus

Exit Sub

End If

If IsNumeric(TextBox3.Text) = False Then

MsgBox «Ошибка в шаге х», vbInformation, «График»

TextBox3.SetFocus
Exit Sub

End If

If IsNumeric(TextBox4.Text) = False Then

MsgBox «Ошибка в конечном значении у», vbInformation, «График»

TextBox4.SetFocus

Exit Sub

End If

'Считывание с диалогового окна значений переменных

х_нз = CDbl(TextBox2.Text)

х_шаг = CDbl(TextBox3.Text)

х_пз = CDbl(TextBox4.Text)

УрГрафика = Trim(TextBox1.Text)

'Проверка согласованности введенных данных

If х_нз >= х_пз Then

MsgBox «Начальное значение х слишком большое», vbInformation, «График»

TextBox2.SetFocus

Exit Sub

End If

If х_нз + х_шаг >= х_пз Then

MsgBox «Шаг х великоват», vbInformation, «График»

TextBox3.SetFocus
Exit Sub

End If

'Замена в введенной формуле аргумента х на ссылку $A1

i = 1

Do
'Замена в введенной формуле аргумента х на ссылку $A1

If Mid(УрГрафика, i, 1) = «x» Or Mid(УрГрафика, i, 1) = «X» Then

n = Len(УрГрафика)

If (1 < i) And (i < n) Then

УрГрафика = Left(УрГрафика, i – 1) & «$A1» & Right(УрГрафика, n – i)

End If

If i = 1 Then

УрГрафика = «$A1» & Right(УрГрафика, n – 1)

End If

If i = n Then

УрГрафика = Left(УрГрафика, n – 1) & «$A1»

End If

End If

i = i + 1

Loop While i <= Len(УрГрафика)

ActiveSheet.Cells.Select

Selection.Clear

'Очистка на активном листе ранее введенных данных

ActiveSheet.Range(«A1»).Select
'Заполнение диапазонов значениями аргумента

With ActiveSheet

Range(«A1»).Value = х_нз 'Ввод в ячейку A1 начального значения

'Создание арифметической прогрессии по столбцу с указанным шагом и начальным значением

Range(«A1»).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=х_шаг, Stop:=х_пз, Trend:=False

End With

'Заполнение диапазона значениями функции

With ActiveSheet

nx = Range(«A1»).CurrentRegion.Rows.Count

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

Range(«B1»).FormulaLocal = УрГрафика

'Ввод уравнения поверхности в ячейку B1

If IsError(Evaluate(УрГрафика)) = True Then

MsgBox «Ошибка в формуле», vbExclamation, «График»

Exit Sub

End If

'Заполнение диапазона Range(Cells(1, 2), Cells(nx, 2))

'начиная с ячейки B1, что эквивалентно протаскиванию маркера

'заполнения ячейки B1 на диапазон Range(Cells(1, 2)

Cells(nx, 2))

Range(«B1»).AutoFill Destination:=Range(Cells(1, 2), Cells(nx, 2)), Type:=xlFillDefault

End With

ActiveSheet.ChartObjects.Delete
'Удаление с рабочего листа всех ранее построенных диаграмм

ActiveSheet.Range(Cells(1, 2), Cells(nx, 2)).Select

'Выбор диапазона, по которому строится график

ActiveSheet.ChartObjects.Add(20, 19.5, 192, 192).Select

'Задание и выбор области на рабочем листе, где будет построен график,

'размер графика должен соответствовать размеру объекта Image1

Application.CutCopyMode = False

'Построение графика

ActiveChart.ChartWizard Source:=Range(Cells(1, 1), Cells(nx, 2)), Gallery:=xlLine, Format:=2, PlotBy:=xlColumns, CategoryLabels:=1, SeriesLabels:=0, HasLegend:=False, Title:="График",

CategoryTitle:="Аргумент", ValueTitle:="Функция y" & TextBox1.Text

ActiveSheet.ChartObjects(1).Activate

ActiveChart.Axes(xlValue).AxisTitle.Select

With Selection

HorizontalAlignment = xlCenter

VerticalAlignment = xlCenter

Orientation = xlUpward

End With

'Запись диаграммы в файл и загрузка картинки в Imagel

ActiveChart.Export Filename:="Graph.jpg",

FilterName:="JPEG"
UserForm1.Image1.Picture = LoadPicture(«graph.jpg»)

ActiveSheet.Range(«A1»).Select
End Sub

Private Sub CommandButton2 Click()

'Процедура закрытия диалогового окна

UserForm1.Hide

End Sub

Private Sub UserForm Initialize()

'Рисунок масштабируется с учетом относительных размеров так, чтобы он помещался в объекте Imagel

With Imagel

PictureAlignment = fmPictureAlignmentTopLeft

PictureSizeMode = fmPictureSizeModeStretch

End With

End Sub


Разработка приложений

Очень часто при работе в Excel возникает необходимость выделить какие-то определенные строки и отправить их в документ Microsoft Word, например, для печати.

Так стандартное приложение Word создаётся:

Dim AppWord As Word.Application

Dim i As Long

Cоздается объект Word

Set AppWord = CreateObject("Word.Application")

Для активации приложения:

AppWord.Visible = True

Для добавления приложения:

AppWord.Documents.Add

Для переноса данных на Ваше усмотрение

Range("A5:G5").Copy

Для выделения и вставки

AppWord.Selection.Paste

Для самостоятельного задания значений, данный ввод можно автоматизировать

For i = 6 To 10

If Cells(i, 18) = True Then ' условие если...

Range(Cells(i, 1), Cells(i, 16)).Copy

AppWord.Selection.Paste 'выделение, вставка

End If 'конец блока else

Next

Application.CutCopyMode = False

Для окончания работы с приложением Word

Set AppWord = Nothing

End Sub


[1] Вычислительный центр…

[2] Для ввода данных использовать встроенную функцию InputBox.

[3] Для вывода результатов использовать встроенную функцию MsgBox.

[4] Неопытность начинающего программиста выдает то, что получив задание, он практически сразу садится писать исходный код. Такой подход в корне не правильный, так как приводит к множественному переписыванию текста программы. Не спешите кодировать - это самое простое в разработке программ. Начните с проектирования: обдумайте что, зачем и как должна делать ваша будущая программа. Поищите решения аналогичных задач. Составьте общий алгоритм вашей программы. Не стесняйтесь показать свою неопытность: программисты обычно достаточно лояльны к молодым коллегам и скорее всего помогут вам, самое меньшее советом. А вот потом можно приниматься непосредственно за кодирование.

[Ю1]Номер лабораторной работы

[Ю2]Порядковый номер студента