Чтение онлайн

на главную

Жанры

Офисное программирование
Шрифт:

Пример 54. [6] По введенным в диалоговое окно «Построение графика» (рис. 102) начальным, конечным значениям аргументов и их шагам изменения строится график. Уравнение графика также вводится в программу из диалогового окна. Уравнение должно быть составлено в соответствии с правилами, по которым строятся функции рабочего листа, но в качестве аргументов в нем следует использовать х вместо ссылки на ячейку. Программа сама переведет аргумент в ссылку на ячейку. После табуляции введенной функции программой и построения поверхности на рабочем листе (рис. 103) этот график также отображается в объекте управления Image, расположенном в диалоговом окне Построение графика (рис. 102).

6

Гарнаев А. Самоучитель vba. СПб.: БХВ-Петербург, 2004.

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

Обсудим, как приведенная ниже программа

решает описанную задачу и что происходит в ней.

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

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

UserForm_Initialize

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

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

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

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

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

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

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

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

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

Рис. 104. Пример сообщения о несогласованности данных

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

Нажатие кнопки Отмена запускает на выполнение процедуру 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

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

Создание VBA-программ

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

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

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

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

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

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

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

Глава 9

Базы данных в Excel

9.1. Заполнение базы данных

Элементы управления

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

Элемент управления ScrollBar

(полоса прокрутки) и элемент управления SpinButton

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

Value – возвращает текущее значение полосы прокрутки (только целые неотрицательные числа);

Min – минимальное значение полосы прокрутки (только целые неотрицательные числа);

Поделиться:
Популярные книги

Тринадцатый IV

NikL
4. Видящий смерть
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Тринадцатый IV

Огненный князь 6

Машуков Тимур
6. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 6

Изгой. Пенталогия

Михайлов Дем Алексеевич
Изгой
Фантастика:
фэнтези
9.01
рейтинг книги
Изгой. Пенталогия

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Искушение генерала драконов

Лунёва Мария
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Искушение генерала драконов

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Смерть может танцевать 2

Вальтер Макс
2. Безликий
Фантастика:
героическая фантастика
альтернативная история
6.14
рейтинг книги
Смерть может танцевать 2

Гром над Академией Часть 3

Машуков Тимур
4. Гром над миром
Фантастика:
фэнтези
5.25
рейтинг книги
Гром над Академией Часть 3

Провалившийся в прошлое

Абердин Александр М.
1. Прогрессор каменного века
Приключения:
исторические приключения
7.42
рейтинг книги
Провалившийся в прошлое

Последняя жертва

Мид Райчел
6. Академия вампиров
Фантастика:
ужасы и мистика
9.51
рейтинг книги
Последняя жертва

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Наследник старого рода

Шелег Дмитрий Витальевич
1. Живой лёд
Фантастика:
фэнтези
8.19
рейтинг книги
Наследник старого рода

Книга 5. Империя на марше

Тамбовский Сергей
5. Империя у края
Фантастика:
альтернативная история
5.00
рейтинг книги
Книга 5. Империя на марше

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI